2015-04-22 2 views
1

У меня есть строка, как это:Преобразовать изо-8859-1 последовательность шестигранной побег в нижний регистр

$str = "\xC4"; 

Согласно Википедии C4 является ISO-8859-1 Hexcode для Ä. Теперь я хочу записать эту строку, чтобы получить ä (также в ISO-8859-1).

Я пробовал различные решения, используя strtolower и mb_strtolower. Ни один из них не работал. Выход был искажен каждый раз.

ответ

2

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

echo mb_strtolower($str, "ISO-8859-1"); 
         //^^^^^^^^^^ 

выход:

ä 
1

strtolower("\xC4") работает просто отлично. Дело в том, что вам нужно интерпретировать полученный байт (xE4) с использованием кодировки ISO-8859-1, иначе вы, очевидно, увидите мусор. Если вы делаете это в браузере, установите соответствующий заголовок к подсказке браузер в ожидаемому кодирования:

header('Content-Type: text/html; charset=iso-8859-1'); 
echo strtolower("\xC4"); 
+1

спасибо deceze, кстати всего 10 минут назад я начал читать вашу статью о кодировках и т.п. большого чтения! – Max

+0

Прошу прощения за то, что ваше решение не сработало, strtolower действительно не запустил его. Решение Rizier123 работало. – Max

+0

Хм, я полагаю, это зависит от региона. Работал на местном уровне для меня, но, возможно, действительно не работал в другом месте. Явная функция mb, поддерживающая кодирование, действительно лучше подходит для задачи. – deceze