2014-01-23 112 views
0

我想從字符串中刪除一組字符。我正在使用preg_replace將空白字符替換爲unicode字符。PHP:preg_replace函數用於替換字符串中的範圍的unicode字符

我有一些unicode字符的範圍。

它適用於以下代碼。

$output = "Clean :this; [cnv\[email protected] non AS]CII äóchar^acters."; 
$output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80-\xBF]|[\x2B0-\x36F]/','', $output); 
echo $output; 

但它給以下代碼錯誤。

$output = "Clean :this; [cnv\[email protected] non AS]CII äóchar^acters."; 
$output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80-\xBF]|[\x2B0-\x36F]|[\x2000-\x2BFF]|[\x2E00-\x2E7F]|[\x3000-\x303F]|[\x1D000-\x1D24F]|[\x1F600-\x1F77F]|[\x1F000-\x1F0FF]/','', $output); 
echo $output; 

錯誤: - 的preg_replace():編譯失敗:範圍亂序在字符類在偏移97

我可以使用循環用於從字符串中刪除的Unicode字符。所以我需要運行循環更多的範圍。

能否請你在上面的代碼中建議我哪個更好?無論是循環還是preg_replace?如果preg_replace更好,那麼需要解決上述錯誤。

回答

2

您的問題是\x將只接受兩個數字,所以你需要添加大括號,如:

$output = "Clean :this; [cnv\[email protected] non AS]CII äóchar^acters."; 
$output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80}-\xBF]|[\x{2B0}-\x{36F}]|[\x{2000}-\x{2BFF}]|[\x{2E00}-\x{2E7F}]|[\x{3000}-\x{303F}]|[\x1{D000}-\x{1D24F}]|[\x{1F600}-\x{1F77F}]|[\x{1F000}-\x{1F0FF}]/u','', $output); 

- 附,你還需要u改性劑添加到您的正則表達式。