答案 0 :(得分:3)
€
不是有效的XML实体。
尝试解决实体的编码问题是一种不好的做法。相反,请确保所有字符串都是正确的UTF-8。
答案 1 :(得分:3)
首先确保你的字符串实际上是UTF-8。 PHP中的方法和函数将期望它作为UTF-8独立于输出。可以使用其他字符集/编码,但这非常复杂。
如果使用DOM或XMLWriter等XML API创建XML,则会根据需要处理编码。在UTF-8 XML文档中,€
不需要编码。
$document = new DOMDocument('1.0', 'UTF-8');
$document
->appendChild($document->createElement('price'))
->appendChild($document->createTextNode('€ 42.00'));
echo $document->saveXml();
输出:
<?xml version="1.0" encoding="UTF-8"?>
<price>€ 42.00</price>
但是在ASCII XML文档中,需要将特殊字符编码为数字实体。像€
这样的命名实体将无效。它们特定于(X)HTML而不是XML。
$document = new DOMDocument('1.0', 'ASCII');
$document
->appendChild($document->createElement('price'))
->appendChild($document->createTextNode('€ 42.00'));
echo $document->saveXml();
输出:
<?xml version="1.0" encoding="ASCII"?>
<price>€ 42.00</price>
XMLWriter也是如此:
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'ASCII');
$writer->writeElement("price", '€ 42.00');
$writer->endDocument();
echo $writer->outputMemory();
如果您将XML生成为文本(通常不是最佳选择),则必须自己处理编码:
echo '<?xml version="1.0" encoding="UTF-8"?>', "\n";
printf('<price>%s</price>', htmlentities('€ 42.00', ENT_XML1 | ENT_COMPAT, "UTF-8"));
输出:
<?xml version="1.0" encoding="UTF-8"?>
<price>€ 42.00</price>
答案 2 :(得分:-2)
你试过用'€'吗?并确保使用下面的剪辑清理你的字符串:
$currentString = preg_replace("[^!-~ ]", '', $currentString);