PHP вообще не заботится о кодировании строк, строки - это двоичные данные в PHP.Таким образом, вы должны знать кодировку данных внутри строки, если вам нужно кодирование.Вопрос в следующем: имеет ли значение кодировка в вашем случае?
Если вы зададите для содержимого строковых переменных что-то похожее на то, что вы сделали:
$string="ぁ";
Это будет , а не содержит UTF-8. Вместо этого он содержит двоичную последовательность, которая не является допустимым символом UTF-8.Вот почему браузер или редактор отображает вопросительный знак или аналогичный.Поэтому, прежде чем продолжить, вы уже видите, что что-то может быть не так, как задумано. (Оказалось, что это был отсутствующий шрифт на моем конце)
Это также показывает, что ваш файл в редакторе поддерживает UTF-8 или какой-то другой вариант кодировки Unicode.Просто помните следующее: один файл - одна кодировка.Если вы храните строку внутри файла, она находится в кодировке этого файла.Проверьте ваш редактор, в какой кодировке вы сохраняете файл.Тогда вы знаете кодировку строки.
Давайте просто предположим, что это какой-то действительный UTF-8, например, так (поддержка моего шрифта):
$string="ä";
Затем вы можете сделать двоичное сравнениепозже строки:
if ( 'ä' === $string )
# do your stuff
Поскольку он находится в одном и том же файле, а строки PHP являются двоичными данными, это работает с любой кодировкой.Поэтому обычно вам не нужно перекодировать (изменять кодировку) данные, если вы используете функции, которые двоично-безопасны - это означает, что кодировка данных не изменяется.
Для регулярных выражений кодирование играет роль.Вот почему есть модификатор u
, который сигнализирует о том, что вы хотите, чтобы выражение работало с данными в кодировке Unicode.Однако, если данные уже закодированы в Unicode, вам не нужно менять их на Unicode, прежде чем использовать preg_match
.Однако в вашем примере кода регулярные выражения совсем не нужны, и простое сравнение строк делает работу.
Резюме:
$string="ä";
if ( 'ä' === $string )
# do your stuff