【问题标题】:Parsing xml with PHP what to do with characters like these用 PHP 解析 xml 如何处理这些字符
【发布时间】:2012-10-25 15:04:14
【问题描述】:

我正在使用 php 解析一个 xml 文档。

当我在浏览器中看到结果时,我得到以下字符:

ñ 而不是西班牙语 ñ

à 代替 í

á 代替 á

ó 而不是 ó

é而不是é

我打算使用 str_replace 并将每个奇数字符替换为好的字符,但遗憾的是,之前的模式只是有时会发生,而且通常我有大量奇数字符:(

xml 标题为:

<?xml version="1.0" encoding="iso-8859-1"?>

但是如果我把它改成 utf-8 它就不会被打印出来..

我使用 simplexml_load_string 将 xml 加载为字符串(来自类似的数据库)

你能给我一些关于如何解决这个问题的想法吗?

非常感谢

【问题讨论】:

  • 我理解 PHP 显示这些字符是否正确?您的 HTML 输出设置为 UTF 吗?
  • 这意味着 UTF-8 数据被误解为 iso-8859-1.. 您需要设置 utf-8 内容类型标头
  • 在您的浏览器中,尝试在“查看->字符编码”菜单下更改字符编码。一旦你找到正确显示的那个,在你的代码中使用它。

标签: php xml encoding xml-parsing


【解决方案1】:

你有两个选择:

a) 在您的 php 文件中的任何输出之前包含 header('Content-Type: text/html; charset=iso-8859-1');

b) 使用$str = mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1');将输出转换为utf-8

两者都应该解决问题。

【讨论】:

  • 数据已经在 utf-8 中,被误解为 iso-8859-1 或类似的。如果你把ñ看成ISO-8859-1,那就是C3B1,如果你把C3B1解释成utf-8,你就会得到ñ
  • 是的!是的!我喜欢 mb_convert_encoding ;)
【解决方案2】:

SimpleXML 使用 UTF-8 对存储的字符串进行编码。您可以使用带有 iso-8859-1 的 XML 文件,但如果您想使用这种编码打印 XML 值,则必须先使用 utf8_decode

【讨论】:

    【解决方案3】:

    $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

    【讨论】:

      【解决方案4】:
      // new xml
      $xml = new SimpleXMLElement('new.xml'); 
      
      // Displaying XML in textual form
      echo $xml->asXML();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        相关资源
        最近更新 更多