Regex匹配除未定义的XML实体以外的所有内容


Regex to match everything except undefined XML entitites

与HTML不同,XML只知道四种命名实体:<, >, '"

我一直在PHP中使用XMLWriter将大量数据写入XML文件,首先我转义了所需的文本,这给了我一些其他实体,如¤

我已经尝试了以下regex:

&(?!(apos|quot|[gl]t|amp);)

,但它只匹配&,而不匹配Â&current;。我做错了什么?

如果您将'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 &amp; B &amp; &lt;C&gt;</root>