【问题标题】:How to handle curly apostrphes and curly quotes in PHP when generating xml?生成xml时如何处理PHP中的花撇号和花引号?
【发布时间】:2012-02-05 19:06:51
【问题描述】:

我的数据库中有一些可能是从 word 文档中复制和粘贴的文本,其中包含一些弯引号和弯撇号。 PHP 代码正在生成 XML 数据/文档,将此文本作为其 XML 元素之一。

这是我在尝试显示 XMl 文档时遇到的错误

此页面包含以下错误:

第 1 列第 40 行的错误:编码错误

下面是第一个错误之前的页面渲染。

我已经按照here 帖子中的说明进行了尝试,但它对我不起作用。也试过了

$output = iconv('UTF-8', 'ASCII//TRANSLIT', $input);

如上所述here。这个显示文本,直到出现大引号或撇号。我需要在这里提及任何不同的字符输出格式吗?

在生成 XML 文档时,PHP 中是否有可用的函数来处理这些类型的特殊字符。我正在为 XML 文档使用 <?xml version="1.0" encoding="utf-8"?> 字符编码

这是我的一些代码

header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="utf-8"?>';

$item = mysql_fetch_object($result);
<listitems>
    <item>
        <name><?=htmlspecialchars(stripslashes($item->name))?></name>
        <details><?=htmlspecialchars(stripslashes($item->details))?></details>
        .
        .
        .
        .

    </item>
</listitems>

【问题讨论】:

  • 需要更多信息。获取数据时数据是什么字符集?你能展示一些你用来生成文档的 PHP 代码吗?
  • 我已经用我的一些代码更新了我的问题。
  • 数据库中的数据是什么字符集?
  • 不确定。在表上它说 DEFAULT CHARSET=latin1

标签: php xml character-encoding format


【解决方案1】:

尝试将包含卷曲撇号的文本节点包装在 CDATA 块中,如下所示:

<text><![CDATA[This is my test´s text]]></text>

这样可以防止 xml 查看器解析该文本并正确呈现。

【讨论】:

  • 它显示数据但最终只显示部分数据。刚刚停在中间。
【解决方案2】:

在表格上写着 DEFAULT CHARSET=latin1

您可能正在获取 ISO-8859-1 数据并将其输出为 UTF-8。这将导致超过 128 个基本 ASCII 字符的无效字符。

试试这个iconv():

$output = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $input);

【讨论】:

  • 谢谢Pekka,它有效:) 只是想知道,我们能不能这样写 iconv('latin1', 'UTF-8', $appObj->description);如表中所示,它被称为 latin1。只是想更好地了解它
  • “Latin1”也可以指 Windows Latin 1, windows-1252。事实上,ISO-8859-1 不包含花撇号或花引号,尽管程序有效地将 ISO-8859-1 视为 windows-1252 的情况并不少见。
  • @Jukka 啊,那个细节让我忘记了 - 很高兴知道,谢谢! mySQL's latin1 seems equivalent to Windows-1252 rather than ISO-8559-1。但是这个@SK 意味着如果大引号不起作用,您可能需要使用windows-1252 作为iconv 的第一个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2019-02-17
相关资源
最近更新 更多