Кодировка UTF 8 работает в FF, но не работает в IE - PullRequest
1 голос
/ 01 марта 2012

У меня есть следующая проблема: У меня есть форма, которая получает через GET специальные символы. Он читает их, а затем заполняет поля с этими символами. Я вставил <meta http-equiv="content-type" content="text/html;charset=utf-8" /> прямо под <head>. Все отлично работает в FF, но в IE символы перепутаны, и вместо этого я получаю все эти знаки. Однако в IE, если я щелкаю правой кнопкой мыши на странице и в кодировке меняю UTF-8 на Western European (Windows), эти символы отображаются правильно. Я также попытался добавить AddDefaultCharset Off в мой файл конфигурации Apache, чтобы убедиться, что веб-сервер не перезаписывает кодировку charset. Странно то, что если в моем коде я использую PHP htmlentities, то текст отображается правильно в IE, но неправильно в FF.

Более того, я использовал Firebug и инструменты разработчика, чтобы увидеть, как передаются данные GET, и кажется, что в FF специальные символы преобразуются следующим образом: B6%C3%A4%C3%BC%C3%9F%C3%96%C3%84%C3%9C%20IT%20%C3%A0%C3%A8%C3%AC%C3%B2%C3%B9%20, но в IT данные GET отображаются как * 1008. *.

Может кто-нибудь помочь мне с этим? Начинает разочаровываться, не находя пути в этом FF, а также работает IE.

1 Ответ

0 голосов
/ 01 марта 2012

Вы говорите, что у вас проблемы с URL-адресами GET, такими как

 emeasmartportal.com/sbso/index-test.php?fname=àéèâêîôûœïç

Похоже, проблема в самих входящих данных GET: потому что им нужно кодировать их , прежде чем они смогут узнать, какой набор символовотвечающая страница имеет , браузеры используют разные кодировки по умолчанию для этих данных.Firefox, по-видимому, использует UTF-8 по умолчанию (см., Например, этот отчет об ошибке).IE, похоже, этого не делает.

Я думаю, вам нужно использовать mb_detect_encoding(), чтобы определить, являются ли входящие данные IS-8859-1 или UTF-8.(Этот конкретный случай может быть надежно обнаружен с помощью этой функции.)

Если входящие данные являются ISO-8859-1 (которые вы можете надежно обнаружить с помощью mb_detect_encoding), вам необходимо преобразовать их:

iconv("iso-8859-1", "utf-8", $data) 

если это уже UTF-8, вы этого не сделаете.

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

...