【问题标题】:XML charactor encoding issues with accents带有重音符号的 XML 字符编码问题
【发布时间】:2011-09-26 17:07:57
【问题描述】:

我现在在处理项目时遇到过几次问题,我想知道是否有一个优雅的解决方案。

问题 我正在通过 XML 从 twitter 中提取推文并将它们上传到我的数据库,但是当我将它们输出到屏幕时,我得到了这些字符:

“搬到杜塞尔多夫。â��” 要么 坦比安

如果我有俄语字符,那么我会得到很多丑陋的盒子。

我想要的是在一种编码下显示正确的本地口音。我认为使用 UTF-8 是可能的。

我正在使用什么

  • PHP、MYSQL

读入 XML 文件后,我将执行以下操作来清理数据:

    $data = trim($data);
    $data = htmlentities($data);
    $data = mysql_real_escape_string($data);

我的数据库排序规则是:utf8_general_ci

网页字符集为:charset=UTF-8

我认为这可能与 HTML 实体有关,但我真的很欣赏一个在项目中全面运作的解决方案。

提前致谢。

【问题讨论】:

    标签: php mysql xml character-encoding html-entities


    【解决方案1】:

    您需要将连接的编码更改为 UTF-8(通常为 iso-8859-1)。见这里:How can I store the '€' symbol in MySQL using PHP?

    如果编码正确,则无需调用htmlentities()。我会完全删除它。在 HTML 上下文中输出数据时,您只需要小心使用htmlspecialchars()

    【讨论】:

      【解决方案2】:

      替换这一行:

      $data = htmlentities($data);
      

      有了这个:

      $data = htmlentities($data, null, "UTF-8");
      

      这样,htmlentities() 将单独保留有效的 UTF-8 字符。如需更多信息,请参阅the documentation for htmlentities()

      【讨论】:

        【解决方案3】:

        确保您使用iconv_set_encoding 将您的php 内部编码设置为UTF8,并且您使用EdoDodo 所说的编码信息调用htmlentities。还要确保您是使用 UTF8 编码的数据库存储,尽管您说情况已经如此。

        【讨论】:

          【解决方案4】:

          您不能将htmlentities() 的默认状态用于 XML 数据,因为此函数生成 HTML 实体,而不是 XML 实体。

          不同之处在于 HTML DTD 定义了一组实体代码,Web 浏览器被编程来解释这些代码。但是大多数 XML DTD 没有定义它们(如果 XML 甚至有一个 DTD)。

          默认情况下可用于 XML 的唯一实体代码是 ><&。所有其他实体都需要使用它们的数字实体来呈现。

          PHP 没有xmlentities() 函数,但是如果您阅读the manual page for htmlentities(),您会在cmets 中看到很多人都遇到过同样的问题并发布了他们的解决方案。快速浏览后,我建议查看名为 philsXMLClean() 的那个。

          希望对您有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-11-25
            • 2020-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-13
            • 2012-03-22
            • 1970-01-01
            相关资源
            最近更新 更多