【问题标题】:PHP replace weird space [duplicate]PHP替换奇怪的空间[重复]
【发布时间】:2016-04-22 18:14:43
【问题描述】:

我有一个已转换为 CSV 文件的 Excel 文件。显然,这个文件中有两种spaces,常规空间和不间断空间(我的假设)

将数据保存到数据库时,不间断空间将保存为带有问号 (�) 的黑色菱形。

我一直在阅读,因为这可能已经有了解决方案,但是当我尝试它们时,什么都没有发生。

使用mb_substr 方法:

$name = !empty($data[0]) ? mb_substr($data[0], 0, mb_strlen($data[0]), "UTF-8") : null;

使用str_replace 方法:

$name = !empty($data[0]) ? str_replace(" ", " ", $data[0]) : null;

编辑

我使用 Oracle 作为数据库,这里是定义的字符集:

NLS_CHARACTERSET       = AL32UTF8
NLS_NCHAR_CHARACTERSET = AL16UTF16

这是一个示例数据:

,W.R.,

W前面的空格是变成问号的字符。

【问题讨论】:

  • 您使用的是什么类型的数据库?也许数据库未配置为使用 UTF-8?
  • 看看stackoverflow.com/questions/279170/utf-8-all-the-way-through,它真的可以是任何东西。
  • 当您说保存到数据库时,您使用的是什么数据库? mysql??你的数据库字符集是什么?是 UTF-8 unicode 吗??
  • 可以链接 Excel 文件吗?

标签: php utf-8 whitespace


【解决方案1】:

如果您查看 Excel 程序的设置,看看您是否可以建立原始文件的字符集,然后您可以上传文件并使用 PHP MB_convert_encoding 函数将 Excel 保存的任何内容转换为 @987654324 @,或者更好的是直接从 Excel 将其导出为 UTF-8。

还要注意,如果您使用 MySQL,则应使用 UTF8_ 字符集 BROKENUTF8mb4

【讨论】:

    【解决方案2】:

    我能够通过iconv 解决问题:

    $name = !empty($data[0]) ? iconv("UTF-8", "ISO-8859-1//IGNORE", $data[0]) : null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2012-04-25
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多