XML与HTML不同,只知道四个命名实体:<
,>
,'
和"
。
我一直在PHP中使用XMLWriter将大量数据写入XML文件,首先我转义了所需的文本,这给了我一些其他实体,例如Â
和¤
。< / p>
我尝试过以下正则表达式:
&(?!(apos|quot|[gl]t|amp);)
但它只匹配&
而不是Â
或¤t;
。
我做错了什么?
答案 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 & B & <C></root>