2010-08-27 82 views
4

我遇到了PHP(5.2)无法在字符串中找到字符''的问题,虽然它显然存在。PHP和字符编码问题Â字符

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

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

我的字符串是这样的:前

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

我甚至尝试函数utf8_encode()和utf8_decode():

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

如果我这样做:

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

我得到这个str_replace,没有运气。

解决方案是什么?我已经抛出所有我能找到它......

+0

为£:$输入= str_replace函数( “£”, “£”,$输入); – atwellpub 2010-12-15 05:23:02

回答

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; 
} 
+0

您可以将其扩展为允许所有ASCII字符通过将32更改为0和123更改为255。 – KeatsKelleher 2010-08-27 19:16:42

+0

这将删除许多字符,而不仅仅是重音。 – shamittomar 2010-08-27 19:17:52

+0

对,所有不漂亮,非ASCII字符 – KeatsKelleher 2010-08-27 19:20:18

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

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

看到http://docs.php.net/intro.mbstring

+0

+1,因此可以将替换写为:'str_replace(chr(195).chr(130),'',$ string)'...(其中'195'和'130'为'xC3'和'或者,因为PHP支持十六进制数字:'str_replace(chr(0xC3),chr(0x82),'',$ string)'...... – ircmaxell 2010-08-27 19:39:07

+0

我还发现mb_ereg_replace()似乎不能正常工作;这不是它的目的吗?您的信息非常有用,我一定会阅读您链接的文档。谢谢! – Travis 2010-08-27 20:10:25

+0

@Travis:您传递给mbstring函数的参数也必须正确编码。如果您的脚本中有字符串文字(如''),那么编码取决于您如何保存脚本文件。 – VolkerK 2010-08-27 23:37:13