这是一个UTF-8编码的源文件。我必须遗漏一些明显的东西,但我已经尝试了所有我能想到的排列。
<?php
$bad = array( chr(130), chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(173), chr(160) );
$good = array( chr( 44), chr( 39), chr( 39), chr( 34), chr( 34), chr( 45), chr( 45), chr( 45), chr( 32) );
print_r($bad);
print_r($good);
$str = <<<EOF
bad comma ‚
bad quote ‘
bad quote ’
bad quote “
bad quote ”
bad dash –
bad dash —
bad dash
bad space
EOF;
echo $str;
$clean = str_replace($bad, $good, $str);
echo "\n";
echo( $clean);
当我在浏览器中打开它并查看源代码时......
Array
(
[0] => ‚
[1] => ‘
[2] => ’
[3] => “
[4] => ”
[5] => –
[6] => —
[7] =>
[8] =>
)
Array
(
[0] => ,
[1] => '
[2] => '
[3] => "
[4] => "
[5] => -
[6] => -
[7] => -
[8] =>
)
bad comma ‚
bad quote ‘
bad quote ’
bad quote “
bad quote â€
bad dash –
bad dash —
bad dash Â
bad space
bad comma ‚
bad quote ‘
bad quote ’
bad quote “
bad quote â€
bad dash â€"
bad dash â€"
bad dash Â-
bad space
答案 0 :(得分:1)
ASCII,Multibyte和UTF-8之间存在差异。
在您的情况下,这些字符是多字节字符。 “Multibyte”只是一种任意的非UTF-8编码。
您可以先将它们转换为UTF-8或使用mb_ereg_replace
大多数PHP开发人员对字符编码了解不多,但在使用C / C ++时,它是最重要的事情之一。