用户输入的字符破坏了xml_parse_into_struct完成的xml解码


Character entered by user is breaking xml decoding done by xml_parse_into_struct

谢谢你的回答!关于PHP/MySQL

用户输入一些文本,然后通过htmlentities()进行处理:

$new_userinput = htmlentities($userinput, ENT_QUOTES);

该条目存储在XML中:

...
<entrylist>
    <list>$new_userinput</list>
    <info>$someinfo</info>
</entrylist>
...

xml文件以UTF-8格式存储在数据库中。该站点的HTML也是用UTF-8设置的。

我们观察到的是一个特定的输入,xml被处理:

$p = xml_parser_create();
xml_parse_into_struct($p, $xmlentry, $values, $index);
xml_parser_free($p);`

没有被xml_parse_into_struct()正确处理。

我们在数据库中看到的是:

...
<note>Creatives share shots&acirc;€”small screenshots.</note>
...

需要在htmlentities()中指定字符集,例如

$new_userinput = htmlentities($userinput, ENT_QUOTES, 'UTF-8');

来说明

echo htmlentities("€", ENT_QUOTES); // &acirc;?&not;
echo htmlentities("€", ENT_QUOTES, "UTF-8"); // &euro;