2009-10-09 3 views
0

Обычно я просто делаю это.Заменить "abc123def" на "abc 123 def" в многобайтовой строке

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

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

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

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

ответ

2

Внедрите упаковку для хранения с помощью mb_convert_encoding, поэтому внутренне вам нужно только управлять UTF-8.

(я до сих пор думаю, что вы должны require UTF-8 и спасти всех много неприятностей.)

+0

Я думаю, что то, что я в конечном итоге собираюсь сделать здесь, продолжается со сценарием таким образом, что все базовые функции будут продолжать использовать функции mb_ таким образом, чтобы кодировка могла быть изменена, и отметьте несколько дополнительных функций, чтобы они были доступны только в том случае, когда активным кодированием является utf-8. – joebert

1

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

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

+0

Это определенно верно для UTF-8 и ISO-8859-n, но я думаю, что он особенно беспокоился о более широких кодировках, которые могли бы хранить, например. Азиатский текст более компактно. (Я не думаю, что это стоит беспокоиться, нужно UTF-8, жить счастливо). –