2009-10-09 54 views
0

通常我會這樣做。在多字節字符串中將「abc123def」替換爲「abc 123 def」

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

如果我知道這將是UTF-8我會一個小寫的「u」的修改增加的格局,我想我會是很好的。但是由於utf-8的報告採用2x,在某些情況下,存儲空間比使用本地字符集時所需的存儲空間大3倍,所以我試圖不將應用程序限制爲utf-8。

因此,我試圖遠離我最喜歡的preg_函數。

到目前爲止,大多數事情都相當簡單,但是我通常在preg_中使用字符類的替換,例如「\ d」。

回答

2

實現與mb_convert_encoding存儲包裝,所以你只需要操縱UTF-8。

(我還是覺得你應該require UTF-8和節省大家很多麻煩。)

+0

我想我最終最終要做的是繼續與腳本的方式,所有的基本功能將繼續使用使用mb_函數的方式,可以更改編碼,並標記一些高級功能,以便它們僅在活動編碼爲utf-8時可用。 – joebert 2009-10-24 11:47:04

1

我認爲,UTF-8編碼是這樣的:在127以下的字節值編碼輸出任何東西總是與該字節值匹配的ASCII字符,並且從不是多字節序列的一部分。所以你可以在這種情況下繼續假裝編碼是ASCII,並且不會導致問題(因爲空格和數字都是ASCII)。

請參閱​​中的說明,其中顯示多字節序列中的所有字節都設置了最高有效位(例如全部> 127)。

+0

這對於UTF-8和ISO-8859-n來說是絕對正確的,但我認爲他特別擔心會存儲更大的編碼。亞洲文本更緊湊。 (我認爲這不值得擔心;需要UTF-8,快樂地生活。) – 2009-10-19 17:54:12