PHP:替换unicode符号

时间:2012-09-27 12:07:46

标签: php string unicode utf-8

$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):字符串还是短划线?

3 个答案:

答案 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

我认为第二个更适合你。