【问题标题】:PHP character encoding problemsPHP字符编码问题
【发布时间】:2010-10-23 23:31:37
【问题描述】:

我需要帮助解决我想要一劳永逸地排序的字符编码问题。这是我从 XML 提要中提取的一些内容的示例,插入到我的数据库中然后拉出。

如您所见,许多特殊的 html 字符已损坏/损坏。

我怎样才能一劳永逸地阻止这种情况?我如何才能支持所有类型的字符等?

我已经尝试了我能找到的每一段编码,有时它可以纠正大多数情况,但仍有一些被损坏。

【问题讨论】:

  • 它们在什么时候显得“破碎”?如果您在浏览器中查看提要,您看到的是乱码还是正确的字符? XML 声明中是否有“编码”属性?
  • 只是一个简单的想法,但你能告诉我们你的数据库表是什么字符集吗?如果您执行“SHOW CREATE TABLE tblname;”在 MySQL 中的表上,您应该在末尾看到类似“DEFAULT CHARSET=utf8”的内容。
  • 您的代码从互联网上消失了。请再次将其添加到您的问题中,否则将被删除。请注意将您所问的重要部分放入问题本身!

标签: php xml utf-8 character-encoding


【解决方案1】:

【讨论】:

  • 非常有用,但到目前为止仍然对我没有帮助:(我需要一些 PHP 特定的建议
  • Joel 的那篇文章是/有用的,但它对 unicode 支持“损坏/不稳定”这一事实进行了排序或旁敲侧击,因为产品太多,很难定义什么是好公民。更不用说实现它了。
【解决方案2】:

首先,确保您的数据库的字符编码设置为支持 UTF-8。其次,PHP 的ICONV 将成为您的朋友。最后,确保您的响应标头发送正确的字符编码(同样是 UTF-8)。

【讨论】:

    【解决方案3】:

    似乎使用 ISO 8859-1 解释 UTF-8 编码文本。

    如果您正在处理 XML 文档,则必须使用在 HTTP header field Content-Typecharset 参数中或在 XML declarationencoding 属性中给出的编码。如果两者都没有给出,则 XML 规范将 UTF-8 或 UTF-16 声明为 default character encoding,您必须使用一些 detection

    【讨论】:

      【解决方案4】:

      你试过utf8_encode()utf8_decode()吗?

      你使用哪一个将完全取决于你的数据是如何编码的,你没有指定,但它们对于这种情况非常有用。

      【讨论】:

        【解决方案5】:
        header('Content-type: text/html; charset=UTF-8') ;
        
        /**
         * Encodes HTML safely for UTF-8. Use instead of htmlentities. 
         *
         * @param string $var 
         * @return string 
         */
        function html_encode($var)
        {
            return htmlentities($var, ENT_QUOTES, 'UTF-8');
        }
        

        这两个人救了我,我认为它现在工作。如果我继续遇到问题,我会回来。我应该将它存储在数据库中,例如“&”还是“&”?

        【讨论】:

        • 虽然 UTF-8 可以编码过多的字符,但为什么还要使用字符引用?使用htmlspecialchars 来替换 HTML 特殊字符就足够了,如果你真的需要替换它们。
        【解决方案6】:

        您提供的链接似乎包含以 utf-8 编码的数据。 (点击该链接,然后将浏览器的编码更改为 utf-8)。

        听起来您在从数据库中插入和检索时遇到问题。确保您的数据库表已将 utf-8 设置为编码。

        【讨论】:

          【解决方案7】:
          【解决方案8】:

          在连接到数据库之后,但在执行任何事务之前,请执行以下行以确保所有数据库通信都使用 UTF-8:

          mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $dbconn);

          【讨论】:

            猜你喜欢
            • 2019-11-17
            • 1970-01-01
            • 2013-01-29
            • 1970-01-01
            • 1970-01-01
            • 2011-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多