Замените «abc123def» на «abc 123 def» в многобайтовой строке - PullRequest
0 голосов
/ 09 октября 2009

Обычно я бы просто сделал это.

$str = preg_replace('#(\d+)#', ' $1 ', $str);

Если бы я знал, что это будет utf-8, я добавил бы строчный модификатор "u" в шаблон, и я думаю, что я был бы хорош. Но из-за сообщений о том, что utf-8 занимает в 2 раза больше, а в некоторых случаях в 3 раза больше места, чем было бы, если бы использовался собственный набор символов, я стараюсь не ограничивать приложение utf-8.

Таким образом, я стараюсь держаться подальше от моих любимых функций preg_.

Большинство вещей до сих пор было довольно простым, но я немного застрял на заменах, где я обычно использовал бы классы символов в preg_, такие как "\ d".

Ответы [ 2 ]

2 голосов
/ 09 октября 2009

Реализация оболочки хранения с mb_convert_encoding, поэтому внутренне вам нужно только манипулировать UTF-8.

(я все еще думаю, что вам нужно потребовать UTF-8 и избавить всех от множества неприятностей.)

1 голос
/ 09 октября 2009

Я думаю, что кодировка UTF-8 такова, что что-либо в кодированном выводе со значением байта 127 или меньше всегда является символом ASCII, совпадающим с этим значением байта, и никогда не является частью многобайтовой последовательности. Таким образом, вы можете продолжать притворяться, что кодировка ASCII в этой ситуации не вызывает проблем (поскольку пробелы и цифры - все ASCII).

См. Описание в http://en.wikipedia.org/wiki/UTF-8, где показано, что во всех байтах в многобайтовой последовательности установлен самый старший бит (например, все> 127).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...