Замените «abc123def» на «abc 123 def» в многобайтовой строке.

StackOverflow https://stackoverflow.com/questions/1541641

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top