2013-06-27 5 views
1

Я использую API GoogleMaps для получения информации о местоположении. Результат вызывается через cURL, а извлеченная строка должна быть преобразована в объект JSON с использованием json_decode.json_decode не работает с немецкими символами (даже если encodig UTF8)

Для многих мест (например, в Нидерландах) это работает как шарм. Но для многих немецких (и, вероятно, таких стран, как Австрия, Швейцария и т. Д.) Это не работает должным образом.

Я считаю, что это происходит из-за специальных символов, таких как ß, но и ü, ë, ä, ï и так далее.

Например: это строка принесла с помощью локон (http://maps.googleapis.com/maps/api/geocode/json?address=Stoltenkampstra%C3%9Fe%2011,Bad%20Bentheim&sensor=false&language=nl)

В следующем $sResponse является результатом извлекалось cURL. Когда я пытаюсь выполнить json_decode($sResponse);, его значение становится null. Когда я выполняю json_last_error(), он говорит 5 (что означает JSON_ERROR_UTF8). Когда я выступаю mb_detect_encoding($sResponse), он говорит UTF-8.

Любые предложения?

+0

Здесь он работает с простым 'var_dump (json_decode (file_get_contents (" http://maps.googleapis.com/maps/api/geocode/json?address=Stoltenkampstra%C3%9Fe % 2011, Bad% 20Bentheim & sensor = false & language = nl "));' . – Wrikken

+0

Покажите нам, что именно ответ, что именно вы пытаетесь декодировать. 'Var_dump ($ sResponse)'. – deceze

+1

Argh, thanks Wrikken! я попробовал вашу ссылку, и я тоже видел неправильные символы. Я забыл сообщить документу, что его кодировка должна использовать метатег. Извините! :) – Ben

ответ

2

Если вы столкнулись с этой проблемой, убедитесь, что вы установили, что ваш документ должен исправлять кодировку. В моем случае я забыл включить <meta charset='utf-8'> в свой index.php -файл. Для меня это было то, что я упускал из виду ... Тупой ... но, возможно, это поможет вам в будущем;)

Как правильно упомянуто Gumbo, это было не единственным решением проблемы. (Он только фиксировал, как данные были представлены в моем браузере). Я также играл с библиотекой Encoding, используя Encoding::toUTF8(). Это очень аккуратный и полезный класс, который я нашел во время поиска решения. Вы можете прочитать об этом здесь: Detect encoding and make everything UTF-8

+1

Это не могло устранить проблему: JSON не HTML. – Gumbo

+0

На самом деле вы правы. Я также добавил еще одно. Я обновил свой ответ. Спасибо за то, что он острый;) +1 – Ben

+1

Несмотря на то, что этот класс получает много похвал, он практически бессмыслен. Вы не можете работать с кодировками на основе догадок, это просто невозможно по определению. Вам просто нужно знать, что такое кодирование того, что есть; не догадываться и пробовать. См. [Что каждый программист абсолютно, положительно должен знать о кодировках и наборах символов для работы с текстом) (http://kunststube.net/encoding/). Это не так сложно. – deceze