php输出xml产生解析错误"’"

Lyo*_*yon 5 php xml xml-parsing

是否有任何函数可用于解析任何字符串以确保它不会导致xml解析问题?我有一个php脚本输出一个xml文件,其中包含从表单中获取的内容.

问题是,除了来自php表单的通常字符串检查之外,一些用户文本会导致xml解析错误.我’特别面对这个" ".这是我得到的错误Entity 'rsquo' not defined

有没有人有任何编码xml输出文本的经验?

谢谢!


一些澄清:我正在从xml文件中的表单输出内容,随后通过javascript解析.

我处理所有表单输入: htmlentities(trim($_POST['content']), ENT_QUOTES, 'UTF-8');

当我想将这个内容输出到xml文件中时,我应该如何对其进行编码以使其不会引发xml解析错误?

到目前为止,以下2个解决方案有效

1) echo '<content><![CDATA['.$content.']]></content>';

2) echo '<content>'.htmlspecialchars(html_entity_decode($content, ENT_QUOTES, 'UTF-8'),ENT_QUOTES, 'UTF-8').'</content>'."\n";

上述2种解决方案是否安全?哪个更好?

谢谢,抱歉没有提前提供此信息.

Kra*_*rab 7

你采取了错误的方式 - 不要寻找一个不会给你错误的解析器.而是尝试使用格式良好的xml.

你是怎么&rsquo;从用户那里得到的?如果他确实键入了它,你就没有正确处理输入 - 例如你应该逃避和去&amp;.如果您将实体放在那里(可能代替某些撇号),可以在DTD(<!ENTITY rsquo "&x2019;">)中定义它,或者使用数字符号(&#x2019;)来编写它,因为几乎每个命名实体都是HTML的一部分.Gumbo指出,XML只定义了几个基本的.

编辑基于问题的补充:

  • 在#1中,您以如果用户键入的方式转义内容,则表示]]> <°)))><您遇到问题.
  • 在#2中,您正在进行编码和解码,这会产生$ content的原始值.解码不应该是必要的(如果你不希望用户发布像&amp;应该被解释为&的值).

如果你使用带有ENT_QUOTES的htmlspecialchars(),它应该没问题,但看看Drupal是如何做到的.


sle*_*ate 5

html_entity_decode($string, ENT_QUOTES, 'UTF-8')
Run Code Online (Sandbox Code Playgroud)