Кодировка символов, кажется, работает на сервере MAMP, но не на сервере WAMP - PullRequest
1 голос
/ 15 февраля 2009

Я работаю над веб-приложением, которое должно принимать теги и поисковые запросы на нескольких языках. Это не слишком много спрашивает, не так ли?

Теперь, на моем MAMP сервере, все отлично. Я добавляю многоязычные теги, ищу на любом языке и т.д.

С другой стороны, на рабочем сервере WAMP многоязычные символы создают проблемы. И даже не все время, просто время от времени, или некоторые из персонажей, я еще не уверен.

Что происходит, так это то, что они получают дополнительные символы, а затем их URL-декодирование некорректно.

В обеих средах используется PHP 5, MySQL и Apache.

Я предполагаю, что у меня где-то неправильные настройки.

Есть идеи?

  • обновление: теперь я уверен, что это конкретные буквы (иврит ל, מ א, например)

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

  • тип контента text/html; charset=utf-8

Кроме того, я определил это немного дальше:
Я использую строку поиска: ליבני
На странице результатов я вижу это:

  • В адресной строке искомая фраза правильна и правильно закодирована.
  • В самом HTML я вижу строку " _יבני ", что означает "%D7_%D7%99%D7%91%D7%A0%D7%99", что означает, что ל было закодировано в "%D7_" вместо %D7%9C "как и должно быть.

Я действительно не знаю, куда идти дальше.
Есть идеи? кто-нибудь?

Ответы [ 3 ]

1 голос
/ 16 февраля 2009

Charsets - это простая концепция. Смущает их то, что есть несколько уровней, где это должно быть сделано правильно. Если вы запутались в одном месте, оно обычно будет отображаться в совершенно другом месте.

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

Я рекомендую следующее чтение:

0 голосов
/ 24 февраля 2009

Оказывается, проблема в PHP parse_url (). Я предполагаю, что в некоторых версиях на некоторых платформах parse_url () неправильно обрабатывает символы UTF. Это было замечено на окнах хотя бы еще раз .

Мне удалось обойти это сейчас.

Спасибо всем за внимание и время, Омер.

0 голосов
/ 15 февраля 2009

Я рекомендую вам использовать UTF-8 для внутреннего и внешнего кодирования. Используйте директиву AddDefaultCharset , чтобы сообщить Apache кодировку по умолчанию:

AddDefaultCharset utf-8

Теперь вам просто нужно убедиться, что ваше приложение правильно обрабатывает данные (см. Директиву default_charset ). Если вы используете UTF-8 для вывода, клиент должен использовать это и для дальнейших запросов (URL, данные формы).

...