PHP字符编码࿽;用符号代替à;

PHP字符编码࿽;用符号代替à;,php,utf-8,character-encoding,joomla1.5,Php,Utf 8,Character Encoding,Joomla1.5,嗨,这是一个非常奇怪的错误,我在这个joomla网站的一些页面上: 如果你深入了解某个特定新闻的细节,字符会正确显示 其他口音的字符似乎没有受到影响 我已经检查了MySql数据库中的默认UTF-8编码,以及文本文件是否采用UTF-8编码 其他想法?您是否有机会对从数据库检索到的文本使用htmlspecialchars或html\u entity\u decode?如果是这样,您需要在第三个参数中强制使用UTF8,因为它不是这些函数的默认字符集 示例:htmlentities('hello',n

嗨,这是一个非常奇怪的错误,我在这个joomla网站的一些页面上:

如果你深入了解某个特定新闻的细节,字符会正确显示

其他口音的字符似乎没有受到影响

我已经检查了MySql数据库中的默认UTF-8编码,以及文本文件是否采用UTF-8编码


其他想法?

您是否有机会对从数据库检索到的文本使用
htmlspecialchars
html\u entity\u decode
?如果是这样,您需要在第三个参数中强制使用UTF8,因为它不是这些函数的默认字符集


示例:
htmlentities('hello',null,'utf-8')

A� 符号通常表示浏览器试图显示的字符在所用字体中不可用。如果在其他页面(使用相同的字体)上使用,则可能不是a.。

在您的案例中非常有趣的是,它只影响字母
a
!所以这不可能是编码问题

这是我对你问题的看法。字母
a
在utf8中以两个字节编码。第一个字节是
xC3
,在拉丁语-1中是
Ã
,第二个字节是。。。不间断空间!(其他重音字母,如
è
Ã
编码,后跟拉丁语-1的其他重音字母,不受影响)

因此,我猜想您在某个地方有一个脚本,它删除或替换拉丁语-1中的非中断空格,即character
xA0
。结果字节
xC3
无法正确显示,因此常规占位符
。(只要用拉丁文1载入你的页面,你就会发现我是对的)


找到删除不间断空格的脚本,您就没事了。

您的DB字符集是什么?您确定没有双重编码到UTF8吗?因此,您的文件是UTF8格式的,然后在输出时用UTF8编码。不要忘记mysqldatabase连接。这也必须设置为utf-8。整个链必须是utf-8,否则会损坏字符。幸运的是,这不是真的,它确实是utf-8格式的字符。。。但在@Olivier回答之后,我必须说你是对的,这是一个单字节!这是一个很好的捕获,因为它只显示在用于新闻预览的剥离文本中。你认为它可能是从regexp中去掉的一些特殊字符吗?是的,任何对字符串进行操作并且不支持unicode的东西。。。注意一些不间断的空格!:-)因此,我最终查找了/\xC3\s/个字符,并将它们替换为“\xC3\xA0”您刚刚保存了我的一天。。。对字符串进行preg_替换会导致“a”字符出现问题