Intereting Posts
Печать объекта stdClass Возвращаемые значения метода и исключения .htaccess переписывание URL с помощью php PHP: использование сообщения, когда поля mutliple form имеют одинаковое имя и идентификатор не удалось загрузить ошибку внешнего объекта в SOAP Как str_replace раздел PHP Code Импорт классов и пространств имен в PHP: Какая разница делает лидирующую обратную косую черту? Композитор не находит локальную зависимость vcs Как я могу дезинформировать свои заявления о включении? как php не записывает содержимое изображения на диск? Самое простое приложение для поиска по сайту, которое поддерживает нечеткий поиск? Проблема при настройке сервера сокетов Zend_Db без Zend Framework Как я могу реализовать единый вход (SSO) с использованием Microsoft AD для внутреннего PHP-приложения? CodeIgniter 3: номер ошибки 2014 Команды не синхронизированы; вы не можете запустить эту команду сейчас

url кодирует поведение по-разному в Firefox и Internet Explorer

Я хочу отправить запись пользователя в API геокода google. При этом я обнаружил проблему. Когда я отправляю пользовательский ввод (например, «köln + Germany») через мой скрипт на api в Firefox, он отлично работает. Однако в Internet Explorer это не работает.

Вот освобождение от моего кода, которого достаточно, чтобы показать проблему:

header('Content-type: text/html; charset=UTF-8'); header('Cache-Control: no-cache, must-revalidate'); $loc = urlencode($_GET['loc']); echo $address = "http://maps.googleapis.com/maps/api/geocode/json?address=$loc&sensor=false"; 

Вывод ($ address) в Firefox: http://maps.googleapis.com/maps/api/geocode/json?address=k%C3%B6ln+Germany&sensor=false (работает!)

То же самое в Internet Explorer: http://maps.googleapis.com/maps/api/geocode/json?address=k%F6ln+Germany&sensor=false (возвращает «INVALID_REQUEST»)

Вы можете видеть разницу в кодировке ö. В Firefox это% C3% B6, в IE это k% F6. Если я сделаю ввод пользователем «k% C3% B6ln + Germany», то он также работает в обозревателе Internet Explorer.

Как я могу с PHP гарантировать, что преобразование моих специальных символов в Internet Explorer одинаково, как в Firefox. Итак, ö =% C3% B6 вместо ö = k% F6

Большое спасибо!

Павел

Это проблема с кодировкой, кодировка по умолчанию в Firefox – это UTF-8, а в IE – некоторый ISO-XXXX-X, попробуйте установить

  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

в вашем HTML – <head>...</head> это установит кодировку в UTF-8, поэтому IE будет urlencode строку, как это сделал Firefox, и поэтому создает рабочий запрос.

и, кстати, вы должны предоставить html-страницу, если хотите, чтобы это была ссылка, поэтому вы должны

 echo '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body>'; 

прежде чем вы <a href=...> эхо- <a href=...> и

 echo '</body></html>'; 

после этого.

Таким образом, IE будет использовать данную кодировку UTF-8 при отображении ссылки.

Может показаться, что это будет работать без этого, но тогда IE декодирует данный <a href=...> , догадывается, что это ссылка, а затем создает вокруг него свой собственный html-head-body, чтобы отобразить его, – тогда включает <meta http-equiv="content-type" content="text/html; charset=ISO-XXXX-X"> .

Если вы просто передаете ссылку через «AJAX» на уже загруженную страницу, убедитесь, что эта страница содержит упомянутый метатег.

Поэтому я знаю, что это не может быть правильным решением, но для тех, кто сталкивается с одной и той же проблемой, это обходное решение сработало для меня:

 $loc = $_GET['loc']; $loc = utf8_encode($loc); $trans = array("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss"); $loc = strtr($loc, $trans); $loc = urlencode($loc); 

Поскольку мне не нужно сохранять Umlauts в моем контексте, это нормально.

Проблема косвенно связана с браузером. urlencode обрабатывает строки как последовательность байтов и в результате влияет языковой стандарт, используемый на странице сервера. Большинство веб-серверов проверяют языковые настройки браузера, чтобы обнаружить этот параметр и использовать его для локализованного генерации текста и анализа. Настройки языка IE по умолчанию совпадают с настройками языка локализации операционной системы.

Это означает, что Firefox может сообщать английский как предпочтительный язык пользователя, в то время как IE будет сообщать о нем на одном компьютере. Если вы специально не конвертируете свою входную строку в UTF8, конверсия будет зависеть от локали клиента