PHP не имеет «нативной» поддержки многобайтовых символов; вам нужно использовать расширение "mbstring" & shy; Docs (которое может быть или не быть доступным). Более того, может показаться, что нет способа создать «многобайтовую символьную строку», как таковую; скорее, каждый выбирает обработку нативной строки как многобайтовой символьной строки, используя специальные функции «mbstring». Другими словами, строка PHP не знает своей собственной кодировки символов - вы должны отслеживать ее вручную.
Возможно, вам это удастся, если вы используете кодировку UTF-8 (или аналогичную). UTF-8 всегда кодирует многобайтовые символы в «старшие» байты (например, ß
кодируется как 0xcf 0x9f
), поэтому PHP, вероятно, будет обрабатывать их так же, как и любой другой символ. Вы не сможете использовать кодировку, которая потенциально может кодировать многобайтовый символ в «специальные» байты PHP, такие как 0x22
, символ «двойной кавычки».
Единственные функции регулярных выражений в PHP, которые знают, как работать с конкретными многобайтовыми символами из диапазона множественных наборов символов, - это mb_ereg
& shy; Docs , mb_eregi
Документы , mb_ereg_replace
& Документы и mb_eregi_replace
Документы .
Функции регулярных выражений на основе PCRE, такие как preg_match
& shy; Документы поддерживают UTF-8 с помощью модификатора u
(PCRE8 ) & застенчивый;. Docs 1058 *
Но, конечно, как описано выше, строки PHP не знают своей собственной кодировки, поэтому сначала вам нужно указать библиотеке mbstring, используя функцию mb_regex_encoding. Обратите внимание, что эта функция определяет кодировку строки, которую вы сопоставляете, а не строку, содержащую само регулярное выражение.