2009-02-15 9 views
1

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

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

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

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

Обе среды используют PHP 5, MySQL и Apache.

Я предполагаю, что у меня что-то не так.

Любые идеи?

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

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

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

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

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

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

+0

Вы уже используете UTF-8? Ваше приложение объявляет это исправление (HTTP-заголовок)? Когда возникают эти неправильные проблемы с кодировкой? И воспроизводится ли это? – Gumbo

+0

Я отредактировал вопрос, чтобы ответить на ваш вопрос. спасибо. – Omer

+0

Что именно вы делаете с этими данными? – Gumbo

ответ

0

Оказывается, проблема где-то в пределах parse_url РНР(). Я предполагаю, что в некоторых версиях на некоторых платформах parse_url() не обрабатывает символы UTF правильно. Он был замечен на окнах at least one more time.

Я смог обходить это сейчас.

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

0

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

AddDefaultCharset utf-8 

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

+0

спасибо, , но это не решило мою проблему. – Omer

1

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

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

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