【问题标题】:PHP character encoding � sign instead of àPHP 字符编码 � 符号而不是 à
【发布时间】:2011-09-23 13:49:03
【问题描述】:

您好,这是我在这个 joomla 网站的某些页面上遇到的一个非常奇怪的错误:

http://www.pcsnet.it/news

如果您进入特定新闻的详细信息,则 à 字符会正确显示。

其他重音字符似乎不受影响。

我已经检查了 UTF-8 编码在 MySql 数据库中是默认的,并且文本文件是 UTF-8 编码的。

其他想法?

【问题讨论】:

  • 你的数据库字符集是什么?
  • 你确定你没有双重编码成 UTF8 吗?所以你有你的 UTF8 文件,然后在输出时你用 UTF8 编码它。
  • 不要忘记mysql数据库连接。这也必须设置为 utf-8。整个链必须是 utf-8,否则你会得到损坏的字符

标签: php utf-8 character-encoding joomla1.5


【解决方案1】:

在您的情况下非常有趣的是它只影响字母à!所以不可能是编码问题。

这是我对您的问题的看法。字母 à 在 utf8 中编码为两个字节。第一个字节是xC3,也就是latin-1 中的Ã,第二个字节是……非中断空格! (其他重音字母,如èà 编码,后跟一个latin-1 中的其他重音字母,不受影响)。

因此,我的猜测是您在某个地方有一个脚本,它删除或替换了 latin-1 中的不间断空格,即字符 xA0。生成的孤独字节xC3 无法正常显示,因此改为显示通用占位符。 (只需在 latin-1 中加载您的页面,您就会发现我是对的)。

找到删除不间断空格的脚本,你会没事的。

【讨论】:

  • 这是一个很好的捕捉,因为它只显示在用于新闻预览的剥离文本中。你认为这可能是一些特殊的字符剥离正则表达式?
  • 是的,任何对字符串进行操作且不支持 unicode 的东西...注意带有不间断空格的东西! :-)
  • 所以我最终寻找 /\xC3\s/ 字符并将它们替换为 '\xC3\xA0 '
  • 你刚刚拯救了我的一天......对字符串执行 preg_replace 导致“à”字符出现问题
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    � 符号通常表示浏览器尝试显示的字符在所使用的字体中不可用。如果它适用于其他页面(使用相同的字体),它可能不是 à。

    【讨论】:

    • 不幸的是,这不是真的,它确实是 UTF-8 格式的 à 字符......但在@Olivier 回答之后,我必须说你是对的,它是一个字节 à!
    猜你喜欢
    • 2018-12-10
    • 2018-11-24
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多