Php Json到带有希腊字符的xml
我正在使用curl获取一个json文件,可以在这里找到:(复制粘贴太长了): 在此之后,我使用json_decode获得Associative数组。在这里,一切似乎都正常。当我使用var_dump时,数组中的字符是希腊语。之后,我使用以下代码:Php Json到带有希腊字符的xml,php,json,unicode,utf-8,simplexml,Php,Json,Unicode,Utf 8,Simplexml,我正在使用curl获取一个json文件,可以在这里找到:(复制粘贴太长了): 在此之后,我使用json_decode获得Associative数组。在这里,一切似乎都正常。当我使用var_dump时,数组中的字符是希腊语。之后,我使用以下代码: $JsonClass = new ArrayToXML(); $mydata=$JsonClass->toXml($json); 类ArrayToXML { 下面是使用simplexml后得到的结果 <resources&g
$JsonClass = new ArrayToXML();
$mydata=$JsonClass->toXml($json);
类ArrayToXML
{
下面是使用simplexml后得到的结果
<resources><team-4833>Î?Î?Î¥Î?Î?ΡΩΣÎ?Î? U21</team-4833><t-429>ΠΡÎ?Î?ΡÎ?Î?Î?ΤÎ?Î?Î? Î?ΥΡΩΠÎ?ΪÎ?Î?Î¥ ΠΡΩΤÎ?Î?Î?Î?Î?Î?ΤÎ?Σ</t-429><t-429-short>Î Î?Î </t-429-short><team-15387>Î?Î?Î?Î?Î?Î? U21</team-15387></resources><locale>el_GR</locale></lexicon><relatedNum></relatedNum></betGames>
Icirc;?Î;?Î;¥;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;&ICIR不包括:Icirc;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;Î;&U21el
提前感谢您的回复
注:我在页面中也显示了结果,但没有帮助
我仍然没有找到解决方案,所以我使用了Yannis建议的不同方法
之后,我用simplexml_load_文件加载xml,并使用xslt访问所有节点中的数据并将其存储在我的数据库中。这样做效果很好。如果有人还想尝试解释为什么它不能以我一开始尝试的方式工作,请放心(仅用于学习目的:p)感谢您的回复:)。这对我使用php版本5.3.6在chrome上工作很有效:
$json = file_get_contents('http://www.opap.gr/web/services/rs/betting/availableBetGames/sport/program/4100/0/sport-1.json?localeId=el_GR');
$json = json_decode($json, true);
$xml = new SimpleXMLElement('<ResultSet/>');
array_walk_recursive($json, array ($xml, 'addChild'));
print $xml->asXML();
exit();
$json=file\u get\u contents('http://www.opap.gr/web/services/rs/betting/availableBetGames/sport/program/4100/0/sport-1.json?localeId=el_GR');
$json=json_decode($json,true);
$xml=新的SimpleXMLElement(“”);
array_walk_recursive($json,array($xml,'addChild'));
打印$xml->asXML();
退出();
没有必要-当前的json也是以xml格式提供的,显然:
只需稍微处理一下url参数:)很明显,您的错误在于您正在操作UTF-8编码的Unicode,就好像这些字节是ISO-8859-1一样 我看不出这是在哪里发生的;可能是在您对
htmlentities
的调用中,不管是什么
它可能需要使用某种“多字节”黑客,可能包括这种模式:
/([^\x00-\x7F])/u
使用显式的/u
使其在逻辑代码点而不是8位代码单元(读取:字节)上工作。它可能会抓取一个非ASCII代码点,以便用数字实体替换它。如果没有容易忘记的/u
,它将在字节而不是代码点上工作,这与您的描述所显示的情况相符
可能是这种情况,也可能是您必须切换到一些mb_*()
函数,而不是普通函数。这是为了解决基本的PHP错误,即该语言中没有真正的Unicode支持,只是偶尔出现一些乐队助手,似乎没有什么好的理由会不时脱落
如果你能使用一种干净的语言,它不仅支持正确的Unicode,而且在物理字节和抽象字符之间有一个清晰的分隔,这种事情就不会发生。但我敢打赌这是其他人一定也有的一个常见问题,所以如果它是一个库错误而不是一个(完全可以理解!)代码中的某些地方存在疏忽
从希腊回答你的问题---------
单词“∧ΕΥΚС”?它有ASC(他的代码字符)203-197-213-202-207()----------
然而,当你读到他[普罗斯特特]的时候,206和206是两倍的字母----------
但也可以按照以下方式更改代码206-(203-48=155)-206-(197-48=149)-206-(213-48=165)-
-206-(213-48=165)-206-(202-48=154)-206-(207-48=159)-------------
因此,如果您发现206要>忽略,则解决方案是检查字符---------
他和下一个角色的ASC中添加数字48并查找新角色。>------------
因为我也处理每一个新知识的[Α∏∏∏Κ∏Κ∏Κ∏Κ∑∑Η------
邮寄-->?bluegt03@in.gr
这只在数组没有数字元素的情况下才有效。json的方式是,它在ASOSiactive数组中始终有数字元素。因此xml将有数字元素。
$json = file_get_contents('http://www.opap.gr/web/services/rs/betting/availableBetGames/sport/program/4100/0/sport-1.json?localeId=el_GR');
$json = json_decode($json, true);
$xml = new SimpleXMLElement('<ResultSet/>');
array_walk_recursive($json, array ($xml, 'addChild'));
print $xml->asXML();
exit();
/([^\x00-\x7F])/u