Проблема с кодировкой PHP - PullRequest
1 голос
/ 21 марта 2012

Я пишу базовую функцию в PHP, которая принимает входную строку и преобразует список «странных» символов в URL-ориентированные.Написание функции - это не проблема, а то, как она интерпретирует строки с помощью странных символов.

Например, прямо сейчас у меня есть эта проблема:

$string = "år";
echo $string[0]; // Output: �
echo $string[1]; // Output: �
echo $string[0] . $string[1]; // Output: å
echo $string[2]; // Output: r

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

Я кодирую все в UTF8 и я знаю, что моя проблема связана с UTF8, рассматривая странные символы как два символа, как мы видели выше.

Но как мне обойти это?В основном я хочу добиться этого:

$string = "år";
echo $string[0]; // Output: å
echo $string[1]; // Output: r

Ответы [ 2 ]

2 голосов
/ 21 марта 2012
$string = "år";

mb_internal_encoding('UTF-8');
echo mb_substr($string, 0, 1); // å
echo mb_substr($string, 1, 1); // r
1 голос
/ 21 марта 2012

Поскольку кодировка UTF не всегда составляет 1 байт на букву, но растягивается по мере того, как вам требуется больше места, ваши буквы не-ASCII на самом деле занимают более одного байта памяти.И массивоподобный доступ к строковой переменной возвращает этот байт, а не букву.Таким образом, чтобы получить его, вы должны использовать методы для этого

echo mb_substr($string, 0,1);// Output: å
echo mb_substr($string, 1,1);// Output: r
...