2012-02-11 2 views
1

Моя проблема заключается в следующем:utf8_encode не дает нужного результата

хранить массив, который имеет ключи, как «е», «е» и т.д. В какой-то момент, я должен получить значение из ключ. Это хорошо работает. Но если я хочу хранить «і», «é» и т. Д. В качестве ключей, это не приведет к правильному результату (результаты в ). Моя страница должна быть в UTF-8. Выяснив проблему, я узнал, что utf8_encode должен помочь моей проблеме. Этого не произошло: хотя он создал более читаемый персонаж, он все еще полностью отличался от того, что я хочу. Если важно, phpinfo дает:

Directive Local Value Master Value 
iconv.input_encoding ISO-8859-1 ISO-8859-1 
iconv.internal_encoding ISO-8859-1 ISO-8859-1 
iconv.output_encoding ISO-8859-1 ISO-8859-1 

Что может стать причиной проблемы?

Редактировать: Я думаю, что клавиши массива выполняют некоторую потерю данных. Это правда? Если да, то как предотвратить?

Редактировать2: Решения, которые я пробовал до сих пор: получить значение ключа массива - не удалось; создать массив с одинаковыми клавишами, но значения utf-8 символов: не удалось; Ошибка utf8_encode; [пытался с обоими] iconv_set_encoding: failed; ini_set не удалось; Ошибка mb_internal_encoding. Все вернулись либо с помощью Ã, либо .

+0

Вывод может быть «ISO-8859-1» в соответствии с этими настройками. Это абсолютно не связано с 'utf8_encode'. Проверьте с вашим браузером, какая кодировка применяется. – hakre

+0

Да, выход кажется ISO-8859-1 каким-то образом. Как я могу исправить это без редактирования php.ini? – axiomer

+0

Отправил заголовок, который сигнализирует об этом. Также отключите кодировку вывода iconv, если вы не знаете, что это такое, вам это не понадобится. Проверьте руководство PHP, как вы можете изменить это во время выполнения. Удачи! – hakre

ответ

1

Я собрал некоторые решения и, наконец, он работает.

Что я сделал следующий: Во-первых, я соединил все решения с добавлением этой строки:

ini_set('default_charset', 'UTF-8'); 
iconv_set_encoding("input_encoding", "UTF-8"); 
iconv_set_encoding("internal_encoding", "UTF-8"); 
iconv_set_encoding("output_encoding", "UTF-8"); 
mb_internal_encoding("UTF-8"); 

Это не сработало.

Я просмотрел все ссылки, метод utf8_encode - utf8_decode не работал. Затем я взглянул на функции, я нашел mbstring, поэтому я заменил каждую строковую функцию эквивалентом mbstring.

Это сработало отлично. Затем я понял, что достаточно mb_internal_encoding("UTF-8");. Так что теперь это работает. Спасибо за все предложения!

+2

Итак, в основном вы разрушали свои строки, манипулируя ими с помощью функций строковой кодировки - не знаю? – deceze

+0

Как кажется, да. Интересная часть состоит в том, что ранее она не уничтожалась. Возможно, потому, что это не выполнялось на локальном хосте, а на другом сервере. – axiomer

+0

Стоит прочитать: http://kunststube.net/encoding/ (хороший раздел на PHP, а также следуйте ссылке к статье Джоэля тоже) – cmbuckley

0

Попробуйте добавить эту строку в верхней части всех сценариев, которые будут иметь дело с UTF-8 данных:

mb_internal_encoding ("UTF-8");

или даже лучше, отредактируйте внутреннюю кодировку в файле php.ini.

+0

Я не могу отредактировать php.ini с грустью (общий хостинг). :(Кроме того, это не похоже на работу, выход по-прежнему . – axiomer

0

установки default_charset директиву Try:

ini_set('default_charset', 'UTF-8'); 

Устанавливает кодировку символов, которая отправляется в браузер в заголовке Content-Type.

+0

Не работает. :( – axiomer

Смежные вопросы