正则表达式匹配除未定义的XML实体之外的所有内容

时间:2014-08-26 07:49:56

标签: php xml regex

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

我一直在PHP中使用XMLWriter将大量数据写入XML文件,首先我转义了所需的文本,这给了我一些其他实体,例如&Acirc;&curren;。< / p>

我尝试过以下正则表达式:

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

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

3 个答案:

答案 0 :(得分:1)

如果您在表达式中添加\w+;,它将起作用:

&(?!(?:apos|quot|[gl]t|amp);)\w+;

但是你最好从一开始就使用正确的转义函数,但不能解决这些问题。

答案 1 :(得分:0)

你能否只使用strip_tags()(带有允许的标签列表)而不是htmlentities()?

答案 2 :(得分:0)

不要自己逃避实体。让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>