如何替换字符串中的乱码?

时间:2011-09-21 22:36:52

标签: php char utf

我有这个文字......

  

“我不想让自己变得可信,”大卫微笑着宽容地承认“

...我想删除那些有趣的角色,我已经尝试了str_replace()但它不起作用。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可能使用与源编码不同的编码处理文本。

因此,如果文本是UTF-8,那么您目前不会将其作为UTF-8处理。最简单的方法是发送一个标题,如...

header('Content-Type: text/html; charset=UTF-8');

您还可以添加meta元素,但请确保它是head元素的第一个子元素。

你需要在源头修复它,而不是稍后尝试修补它(这将永远不会有效)。

答案 1 :(得分:2)

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head> 

不同的源通常具有不同的编码,因此您需要指定要在其中呈现视图的编码。 Utf-8是最受欢迎的,因为它涵盖了所有ASCII和许多其他语言。

php的utf8_(de)编码将iso-8859-1转换为utf-8,而相反且常规的字符串操作函数不是多字节 - (utf-8可以)字符识别。您可以使用特定于mb_strings的函数或使用某些参数启用编码。

//如果我弄错了评论

答案 2 :(得分:0)

嗯,你正在使用你应该使用的不同字符编码(你应该使用utf-8编码),所以我会改变它,而不是试图通过快速修复现场修复它(你总体上会遇到更少的问题。)


如果你真的想用PHP修复它,你可以使用ctype_alpha()函数;你应该可以做这样的事情:

$theString = "your text here"; // your input string

$newString = ""; // your new string
$i = 0;
while($theString[$i]) // while there are still characters in the string
{
    if(ctype_alpha($theString[$i]) // if it's a character in your current set
    { 
       $newString .= $theString[$i]; // add it to the new string, increment pointer, and go to next loop iteration
       $i++;
       continue; 
    } // if the specific character at the $i index is an alphabetical character, add it to the new string
    else
    {
       $i++;
    } // if it's a bad character, just move the pointer up by one for the next iteration
}

然后根据需要使用$ newString。实际上,只需改变你的角色编码而不是这样做。您希望整个项目中的编码相同。