Я использую curl, чтобы получить файл json, который может быть расположен здесь: (Копировать и вставлять его слишком долго): http://www.opap.gr/web/services/rs/betting/availableBetGames/sport/program/4100/0/sport-1.json?localeId=el_GR
После этого я использую json_decode, чтобы получить массив ассоциаций.здесь все выглядит нормально. Когда я использую var_dump, символы внутри массива на греческом. После этого я использую следующий код:
$JsonClass = new ArrayToXML();
$mydata=$JsonClass->toXml($json);
class ArrayToXML {
public static function toXML( $data, $rootNodeName = 'ResultSet', &$xml=null ) {
// turn off compatibility mode as simple xml throws a wobbly if you don't.
// if ( ini_get('zend.ze1_compatibility_mode') == 1 ) ini_set ( 'zend.ze1_compatibility_mode', 0 );
if ( is_null( $xml ) ) //$xml = simplexml_load_string( "" );
$xml = simplexml_load_string("<?xml version='1.0' encoding='UTF-8'?><$rootNodeName />");
// loop through the data passed in.
foreach( $data as $key => $value ) {
$numeric = false;
// no numeric keys in our xml please!
if ( is_numeric( $key ) ) {
$numeric = 1;
$key = $rootNodeName;
}
// delete any char not allowed in XML element names
`enter code here`$key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);
// if there is another array found recrusively call this function
if ( is_array( $value ) ) {
$node = ArrayToXML::isAssoc( $value ) || $numeric ? $xml->addChild( $key ) : $xml;
// recrusive call.
if ( $numeric ) $key = 'anon';
ArrayToXML::toXml( $value, $key, $node );
} else {
// add single node.
$value = htmlentities( $value );
$xml->addChild( $key, $value );
}
}
// pass back as XML
return $xml->asXML();
}
public static function isAssoc( $array ) {
return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));
}
}
И тут возникает проблема. Все греческие символы внутри результата представлены, например, в каких-то странных символах Î?Î?Î¥Î?Î?ΡΩΣÎ?Î?
. Я действительно не знаю, что я делаю неправильно. Я действительно плохо разбираюсь в кодировании / декодированиивещи: (.
И чтобы сделать это немного более ясным:
Вот как выглядит ассоциативный массив (из частей, с которыми у меня есть проблема):
{ ["resources"]=> array(4) { ["team-4833"]=> string(24) "ΛΕΥΚΟΡΩΣΙΑ U21" ["t-429"]=> string(72) "ΠΡΟΚΡΙΜΑΤΙΚΑ ΕΥΡΩΠΑΪΚΟΥ ΠΡΩΤΑΘΛΗΜΑΤΟΣ" ["t-429-short"]=> string(6) "ΠΕΠ" ["team-15387"]=> string(16) "ΕΛΛΑΔΑ U21" } ["locale"]=> string(5) "el_GR" } ["relatedNum"]=> NULL }
А вот что я получаю после использования 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>
Заранее спасибо за ваши ответы.
PS: У меня также есть <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
на странице, которую яотобразить результат, но это не помогает.
Я все ещеЯ не нашел решения с этим, поэтому я использовал другой подход, предложенный Яннисом. Я сохранил XML в файле, используя класс, который нашел здесь http://www.phpclasses.org/package/1826-PHP-Store-associative-array-data-on-file-in-XML.html.
После этого я загружаюxml с simplexml_load_file, и я использовал xslt для доступа к данным во всех узлах и сохранения их в моей базе данных. Это работало нормально. Если кто-то все еще хочет попытаться объяснить мне, почему это не работает так, как я пытался это сделатьв начале не стесняйтесь (только для учебной цели: p) Спасибо за ваши ответы:).