带字符的PHP和字符编码问题

时间:2010-08-27 19:11:07

标签: php string encoding utf-8 character-encoding

我遇到一个问题,PHP(5.2)无法在字符串中找到字符“”,尽管它显然存在。

我意识到潜在的问题与字符编码有关,但不幸的是我无法控制源内容。我收到它为UTF-8,字符串中已有这些字符。

我只想将其从字符串中删除。 strpos(),str_replace(),preg_replace(),trim()等无法正确识别它。

我的字符串是这样的:

"Â  Â  Â  A lot of couples throughout the World "

如果我这样做:

$string = str_replace('Â','',$string);

我明白了:

"� � � A lot of couples throughout the World"

我甚至在str_replace之前尝试过utf8_encode()和utf8_decode(),但没有运气。

解决方案是什么?我一直在扔掉我能找到的一切......

3 个答案:

答案 0 :(得分:4)

$string = str_replace('Â','',$string);

这个''编码怎么样?如果您的脚本文件保存为iso-8859-1,则字符串'Â'编码为单字节序列xC2,而(/ one)utf-8表示形式为xC3 x82。 php的str_replace()在字节级别上工作,即它只“知道”单字节字符。

请参阅http://docs.php.net/intro.mbstring

答案 1 :(得分:3)

我用这个:

function replaceSpecial($str){
$chunked = str_split($str,1);
$str = ""; 
foreach($chunked as $chunk){
    $num = ord($chunk);
    // Remove non-ascii & non html characters
    if ($num >= 32 && $num <= 123){
            $str.=$chunk;
    }
}   
return $str;
} 

答案 2 :(得分:1)