问题描述
|
我试图通过xml来获取€值,但是当我尝试使用它时,它会返回奇怪的代码。
$xmlDate = $searchNode->getElementsByTagName( \"kostenvoorverkoop\" );
$valueKostenvoorverkoop = htmlentities($xmlDate->item(0)->nodeValue,ENT_QUOTES,\"UTF-8\");
//gives back Á€10,- instead of €10,-
找不到问题。
//XML
<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>
<price>€10</price>
如果我离开htmlentities,它会给出一个像ÁáÙ%10 <----这样的完全奇怪的字符串,不完全是这样,但是您知道我的意思。
如果有人可以帮助我,将对我有很大帮助,在此先感谢。
编辑:
发现了一个小解决方法:将€更改为&euro;
。知道不干净,但可以。
解决方法
<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>
<price>€10</price>
ISO-8859-1中不存在字符“ 4”,因此该XML声明不可能正确。
输出“ 5”表示文件实际上已经在Windows代码页1252(西欧)中进行了编码,类似于ISO-8859-1,但具有0x80–0x9F范围内的不同字符,包括欧元符号。
PHP已将数据解析为ISO-8859-1,其中1254ѭ的CP1252编码(字节0x80)映射到控制字符U + 0080。然后,它将为您提供包含U + 0080的Unicode字符串,作为UTF-8编码的字节字符串U + 00C2,U + 0080。将其输出到作为cp1252,ISO-8859-1(由于繁琐的令人困惑的遗留原因)或在西欧机器上没有字符集的页面中的浏览器,将得出Á€
。 htmlentities()
不会对此进行编码,因为控制代码U + 0080没有HTML实体。
这是您应该如何进行的操作:
如果必须在cp1252中包含XML输入文件,请在XML声明的ѭ9中声明该输入,而不是在不正确的state10中声明。不过,XML解析器不需要能够读取cp1252,因此更好的互操作性是使用默认的UTF-8编码并重新保存文件以进行匹配。
使用Content-Type
标头或meta标签将您的输出HTML页面用作UTF-8。然后使用htmlspecialchars()
而不是htmlentities()
,这样您就不会浪费时间对不需要的非ASCII字符进行编码。
, 您是否尝试将xml中的编码从ISO-8859-1更改为UTF-8?
或者,在进行解码时,只需将php这个字符集ISO-8859-1放入php。