【问题标题】:UTF-8, XML, and htmlentities with PHP / MysqlUTF-8、XML 和 htmlentities 与 PHP / Mysql
【发布时间】:2011-01-19 17:56:10
【问题描述】:

我在网上发现了很多关于这个主题的不同/不一致的信息,所以我希望有人可以帮助我解决这些问题:

我需要一个函数来清理字符串,以便安全地插入 utf-8 mysql db 或写入 utf-8 XML 文件。不能转换为 utf-8 的字符应该去掉。

为了写入 XML 文件,我还遇到了将 html 实体转换为数字实体的问题。 htmlspecialchars() 几乎一直有效,但我读到它不足以正确清理所有字符串,例如包含无效 html 实体的字符串。

谢谢你的帮助,布赖恩

【问题讨论】:

    标签: php xml utf-8 html-entities


    【解决方案1】:

    您没有说明字符串的来源,但如果您从 HTML 表单提交中获取它们,请参阅这篇文章:

    Setting the character encoding in form submit for Internet Explorer

    无论长短,您都需要明确地告诉浏览器您希望提交表单的字符集。如果您指定 UTF-8,则永远不应从浏览器获得无效的 UTF-8。如果您想保护自己免受任何类型的恶意攻击,您需要使用 iconv:

    http://www.php.net/iconv

    $utf_8_string = iconv($from_charset, $to_charset, $original_string);

    如果您将“utf-8”同时指定为 $from_charset 和 $to_charset,如果 $original_string 包含无效的 UTF-8,iconv() 应该返回错误。

    如果您从其他来源获取字符串并且知道字符编码,您仍然可以使用 iconv()。美国的典型编码是 CP-1252 (Windows) 和 ISO-8859-1(其他所有)。

    【讨论】:

      【解决方案2】:

      这样的?

      function cleanse($in) {
          $bad = Array('”', '“', '’', '‘');
          $good = Array('"', '"', '\'', '\'');
          $out = str_replace($bad, $good, $in);
          return $out;
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用 iconv 或 mbstring 将字符串从任何编码转换为 UTF-8:

        // With the //IGNORE flag, this will ignore invalid characters
        iconv('input-encoding', 'UTF-8//IGNORE', $the_string);
        

        mb_convert_encoding($the_string, 'UTF-8', 'input-encoding');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-25
          • 2012-06-01
          • 2012-03-11
          • 1970-01-01
          • 1970-01-01
          • 2011-06-05
          • 1970-01-01
          相关资源
          最近更新 更多