0

在添加到 xml 文件之前,我想将 $XML_COMMENT 中的 € 符号替换为“欧元”。

€ 符号不是我从 simplexml 获得的 utf-8 字符和错误消息

Warning: SimpleXMLElement::addAttribute(): string is not in UTF-8 in ...
Warning: SimpleXMLElement::asXML(): output conversion failed due to conv error, bytes 0x82 0x26 0x61 0x6D in ....

欧元符号在 MySQL (utf-8) 数据库中显示为“€”

但正确显示在网页的文本区域中。

我尝试使用这些不同的 str_replace

$XML_COMMENT=str_replace('€','euros',$XML_COMMENT)
$XML_COMMENT=str_replace('€','euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(128),'euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(0xE2).chr(0×82).chr(0xAC),'euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(0x82).chr(0x26).chr(0x61).chr(0x6D),'euros',$XML_COMMENT)

没有成功

仅供参考:我在任何地方都使用 utf-8(MySQL、网页和 XML)

这是我的代码

// ? : $XML_COMMENT= "bla bla bla € bla bla bla";
// ? : $XML_COMMENT= "bla bla bla € bla bla bla";
// expected : $XML_COMMENT= "bla bla bla euros bla bla bla";

$ProductLog_XML = simplexml_load_file($file);
$ProductUpdate = $ProductLog_XML->order->product->addChild('update');
$ProductUpdate->addAttribute('comment',$XML_COMMENT);
$fp=fopen(file, "w");
fwrite($fp, $ProductLog_XML->asXML());
fclose($fp);

有没有使用 regex / preg_replace 的替代方法?

4

2 回答 2

4

我遇到了同样的问题,以下对我有用,其中原始 HTML 页面采用 UTF-8 并使用 &euro,在使用 PHP 进行 cURL 处理后吐出为“€”

$nodeValue = str_replace(chr(0xE2).chr(0x82).chr(0xAC), "", $nodeValue)
于 2013-01-13T15:55:05.640 回答
3

您可以尝试htmlentities()转换包括欧元符号在内的所有实体,使它们看起来像€.

我会以下列方式使用它:htmlentities($str, ENT_QUOTES|"ENT_HTML401", "UTF-8", true)

您可以选择使用:htmlentities($XML_COMMENT, ENT_QUOTES | ENT_IGNORE, "UTF-8", true)。有关标志更改的完整说明,请访问下面的链接。根据 OP @baptme 的要求(见评论)。

来源:php.net 参考

于 2012-06-08T11:51:48.250 回答