与HTML不同,XML只知道四种命名实体:<
, >
, '
和"
。
我一直在PHP中使用XMLWriter将大量数据写入XML文件,首先我转义了所需的文本,这给了我一些其他实体,如Â
和¤
。
我已经尝试了以下regex:
&(?!(apos|quot|[gl]t|amp);)
,但它只匹配&
,而不匹配Â
或¤t;
。我做错了什么?
如果您将'w+;
添加到表达式中,它将工作:
&(?!(?:apos|quot|[gl]t|amp);)'w+;
但是您最好从一开始就使用正确的转义函数,它不会给您带来这些问题。
你可以不只是使用strip_tags()(与允许的标签列表)而不是htmlentities()?
不要自己转义实体。让XMLWriter执行所需的转义。
$writer= new XMLWriter;
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('root');
$writer->text('A & B & <C>');
$writer->endElement();
$writer->endDocument();
echo $writer->outputMemory(TRUE);
输出:<?xml version="1.0" encoding="UTF-8"?>
<root>A & B & <C></root>