【发布时间】:2012-09-19 05:12:44
【问题描述】:
$str = str_replace ('–', '-', $str); 不起作用(较长的 Unicode 破折号字符不会按照我的意愿替换为减号字符。
$str 是从数据库中读取的,应该是 UTF-8。
PHP 代码从 Apache 服务器运行。
我需要用减号替换所有这些长破折号。
$dash = "–"; 回声“字符串:”。 bin2hex($str) 。 “,破折号:”。 bin2hex($dash) 。 "\n"; 回声“字符串:”。 $str 。 “,破折号:”。 $破折号。 "\n"; 字符串:5a656c626f726166202623383231313b20d0bdd0bed0b2d18bd0b920d0bfd180d0b5d0bfd0b0d180d0b0d18220d0b4d0bbd18f20d0bbd0b5d187d0b5d0bdd0b8d18f20d0bcd0b5d0bbd0b0d0bdd0bed0bcd18b,破折号:e28093 字符串:Zelboraf – новый препарат для лечения меланомы,破折号:–
出了什么问题(不是正确的 UTF-8):字符串还是破折号?
【问题讨论】:
-
$str is read from a database and should be in UTF-8应该是还是它?字符串和包含脚本的文件都应该是 UTF8。那么你的 sn-p 应该可以工作了。 -
$str 是 UTF-8,脚本是 UTF-8。但它不起作用:-(
-
请将a hex-dump 的
$str和'–'添加到您的问题中。一个可以验证您是否从数据库中获取 UTF-8,另一个可以验证您是否从文件中获取。 -
我添加了十六进制转储。我看到字符串的十六进制转储中没有“破折号”子字符串,但我不明白出了什么问题:$str 或 $dash。