【问题标题】:PHP str_replace doesnt replace character "°"PHP str_replace 不替换字符“°”
【发布时间】:2017-06-21 17:00:37
【问题描述】:

你好!

我从 .xlsx 文件中获取字符串 ->"N°X"

我想将"N°" 替换为Num_X

我正在尝试这样做

$var = str_replace("N°","Num_",$var);

但是什么都没有被替换(根据echo $var) 问题来自°,因为当我尝试用其他字符串替换某些字符串时 (没有°)str_replace 有效

有什么建议吗?

【问题讨论】:

  • 这可能不是您要替换的字符,而是一个看起来相似的字符。
  • 尝试 mb_str_replace,但它适用于本地。它一定是一个不同于你想象的角色
  • @Ice76 我也在本地机器上试过,似乎工作正常。
  • 似乎无法复制!你在用 PHP7 吗?
  • PHP 文件(在磁盘上)可能未以 UTF-8 编码,str_replace() 可能设置为 UTF-8

标签: php string phpexcel


【解决方案1】:

确保输入字符串为 UTF8。

$var = "N°X";
print mb_detect_encoding($var);

如果您没有从中得到UTF-8,请转换它:

$var = mb_convert_encoding($var, 'UTF-8');

然后您的str_replace 将按预期工作。

另一个可以帮助您解决编码问题的工具是xxd。

php -r '$var = "N°X"; echo $var;' | xxd

应该返回

00000000: 4ec2 b058                                N..X

显示中间字符被编码为 C2B0 十六进制,即 Unicode 字符“度数符号”(U+00B0)。 fileformat.info 现在派上用场了。

【讨论】:

  • 还要注意 unicode NUMERO SIGN 字符 (№)。
  • 哎呀,如果我得到一些答案,我会收到一些通知是的,这就是我所做的 $var = mb_convert_encoding ($var,"Windows-1252", "UTF-8");它的工作原理:) 谢谢
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多