$str = str_replace ('–', '-', $str);
不起作用(较长的Unicode短划线字符不会替换为减号字符,如我所愿。
$ str从数据库读取,应该是UTF-8。
PHP代码从Apache服务器运行。
我需要用减去字符替换所有这些长短划线。
$dash = "–"; echo "string: " . bin2hex($str) . ", dash: " . bin2hex($dash) . "\n"; echo "string: " . $str . ", dash: " . $dash . "\n"; string: 5a656c626f726166202623383231313b20d0bdd0bed0b2d18bd0b920d0bfd180d0b5d0bfd0b0d180d0b0d18220d0b4d0bbd18f20d0bbd0b5d187d0b5d0bdd0b8d18f20d0bcd0b5d0bbd0b0d0bdd0bed0bcd18b, dash: e28093 string: Zelboraf – новый препарат для лечения меланомы, dash: –
有什么问题(不适用于UTF-8):字符串还是短划线?
答案 0 :(得分:2)
这是一个编码为“ - ”的HTML实体:-)这就是我的失败。
答案 1 :(得分:0)
<?php
$str = 'Test–asd';
$old = '–';
$new = '!';
$str = str_replace ( $old, $new, $str );
echo $str;
?>
这对我来说很好用:
输出:
Test!asd
似乎您遇到了不同的编码问题,而不是UTF8字符更改。
答案 2 :(得分:-1)
修改强>
试试这个:
$str = str_replace('\xe2\x80\x94', '-', $str);
尝试:
$str = str_replace(chr(150), '-', $str); // endash
或
$str = str_replace(chr(151), '-', $str); // emdash
我认为第二个更适合你。