gpt4 book ai didi

返回的 PHP SimpleXML 值用奇怪的字符代替连字符和撇号

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:31 26 4
gpt4 key购买 nike

我环顾四周,似乎找不到解决方案,所以就在这里。

我有以下代码:

$file = "adhddrugs.xml";
$xmlstr = simplexml_load_file($file);
echo $xmlstr->report_description;

这是简单的版本,但即使尝试这个,任何连字符和撇号都会变成:^a(欧元符号)商标符号。

我尝试过的是:

echo = (string)$xmlstr->report_description; /* did not work */
echo = addslashes($xmlstr->report_description); /* yes I know this doesnt work with hyphens, was mainly trying to see if I could escape the apostrophes */
echo = addslashes((string)$xmlstr->report_description); /* did not work */

还有 htmlspecial(同样我知道不能使用连字符)、htmlentities 和其他一些技巧。

现在的情况是我从提要中获取 XML 文件,所以我无法更改它们,但它们非常标准。带有连字符等的文本封装在 cdata 标记中,编码为 UTF-8。如果我检查来源,我会看到来源中的连字符和撇号。

现在只是为了查看编码是否关闭或标记错误或其他奇怪的东西,我尝试查看原始 XML 文件并确保它正确显示。

我敢肯定,在我急于寻找答案的过程中,我忽略了一些简单的事情,事实上,这是我第一次使用 SimpleXML,我错过了一个非常简单的解决方案。只是不要因为它而停靠我,我确实确实尝试过自己找到答案。

再次感谢。

最佳答案

This is the simple version, but even trying this any hyphens apostrophes are turned into: ^a (euro sign) trademark sign.

这是由不正确的字符集猜测(以及可能的重新编码)引起的。

如果文本包含 "curly apostrophe"= "Right single quotation mark"= U+2019 字符,将其保存为 UTF-8 编码会产生字节 0xE2 0x80 0x99。如果再次读取同一个文件假设其字符集是 windows-1252,则撇号字符 (0xE2 0x80 0x99) 的字节流被解释为字符 â '(=带有抑扬符号、欧元符号、商标符号的小“a”)。同样,如果将此错误解释的文本保存为 UTF-8,则原始字符会导致字节流 0xC3 0xA2 0xE2 0x82 0xAC 0xE2 0x84 0xA2

总结:您的原始数据是 UTF-8,而您读取数据的部分代码假定它是 windows-1252(或 ISO-8859-1,通常实际上被视为 windows-1252)。这种字符集假设的一个可能原因是 HTTP 的默认字符集是 ISO-8859-1。 '当发件人未提供明确的字符集参数时,“文本”类型的媒体子类型被定义为在通过 HTTP 接收时具有默认字符集值“ISO-8859-1”。来源:RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1

附言。这是一个很常见的问题。只需使用查询 doesn't -doesn't 进行 Google 或 Bing 搜索,您就会看到许多页面都存在相同的编码错误。

关于返回的 PHP SimpleXML 值用奇怪的字符代替连字符和撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4833805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com