2015-06-14 6 views
0

Я пытаюсь разобрать этот файл JSON в PHP: http://www.oref.org.il/WarningMessages/alerts.jsonПолучение иврит JSON в PHP файл

Этот файл содержит еврейские буквы, которые вызывают кодирующим проблемы.

Мой сценарий:

$content = file_get_contents('http://www.oref.org.il/WarningMessages/alerts.json'); 
$json = json_decode($content); 
echo $json->id; 

Он просто ничего не будет отображаться. Я просто получаю пустую страницу. Но если я делаю echo $content;, он отлично отображает json-файл.

Json Пример файла:

{ 
"id" : "1434292591050", 
"title" : "פיקוד העורף התרעה באזור ", 
"data" : [] 
} 

Я читал несколько других подобных проблем и решений, но ни один из них не помог устранить эту проблему. Я пытался использовать mb_detect_encoding и iconv, но это не помогло.

Спасибо!

+0

Показать, как вы пытались использовать 'iconv'? Что такое кодировка сценария? – umka

+0

@umka '$ content = iconv (« ISO-8859-8 »,« UTF-8 », hebrev (iconv (« UTF-8 »,« ISO-8859-8 », $ content))); пустую страницу. Я не думаю, что iconv может решить проблему, но я дал это как пример того, что я пробовал. Кодировка сценария - UTF-8. – morha13

+0

Что вы получаете, если вы делаете 'var_dump ($ json);'? – Elin

ответ

1

Содержимое файла вы получаете в UTF-16 кодировке. Вы должны его преобразовать:

$content = file_get_contents('http://www.oref.org.il/WarningMessages/alerts.json'); 
$content=iconv("UTF-16", "UTF-8", $content); 
$json = json_decode($content,true); 
print_r($json); 
+0

Большое вам спасибо! Я пытался исправить это уже через 2 часа! – morha13

1

Вы можете попробовать следующее iconv:

$content = iconv('utf-16', 'utf-8', $content); 

затем json_decode работает правильно и возвращается:

stdClass Object 
(
    [id] => 1434292591050 
    [title] => פיקוד העורף התרעה באזור 
    [data] => Array 
     (
     ) 

) 
+0

Спасибо, но извините, umbka ответил первым, но вы отвечаете хорошо :) Вы знаете, как мне получить данные из массива? – morha13

+0

@MorHaviv На самом деле, я был первым с несколькими секундами впереди :). В любом случае, о массиве, я думаю, вы говорите об элементе 'data'. Вы сможете получить его так же, как вы можете получить другие элементы (как вы уже делали с 'id') -' $ array = $ json-> data; '. Обратите внимание, что вам нужно использовать 'json_decode ($ content);'. Указание флага 'true' в конце возвращает ассоциативный массив, а не' stdClass', и в этом случае вы не можете ссылаться на объекты с обозначением '->'. – VolenD

+0

Благодарим вас за советы, но по какой-то причине это не работает. Это мой скрипт: \t '$ content = file_get_contents ('http://www.klh-dev.com/cumta/systems/testszone/alerts.json') ; \t $ content = iconv ("UTF-16", "UTF-8", $ content); \t $ json = json_decode ($ content); \t $ cityArray = массив ( \t \t 'ID' => " '". $ JSON [ 'ID']. "'", \t \t 'Название' => "'". $ JSON [ 'название' ]. '', \t \t 'areas' => "'". $ Json-> data. "', \t);' – morha13