2010-08-29 127 views
5

我想在字符串中替換空字符串中的所有非字字符,期望空格並將所有多個空格放在一起作爲單個空格。PHP mb_ereg_replace不會替換,而preg_replace按預期工作

以下代碼執行此操作。

$cleanedString = preg_replace('/[^\w]/', ' ', $name); 
$cleanedString = preg_replace('/\s+/', ' ', $cleanedString); 

但是,當我試圖使用mb_ereg_replace什麼也沒有發生。

$cleanedString = mb_ereg_replace('/[^\w]/', ' ', $name); 
$cleanedString = mb_ereg_replace('/\s+/', ' ', $cleanedString); 

$ clearedString與上述情況下的$ name相同。我究竟做錯了什麼?

回答

10

mb_ereg_replace不使用分隔符。你可能也可能不需要在之前指定編碼。

mb_regex_encoding("UTF-8"); 
//regex could also be \W 
$cleanedString = mb_ereg_replace('[^\w]', ' ', $name); 
$cleanedString = mb_ereg_replace('\s+', ' ', $cleanedString); 
+0

謝謝你是我犯的錯誤。 如果我的輸入是UTF-8,是否有關於使用哪種方法的建議? – Jithin 2010-08-29 14:02:37

+0

@Jithin如果它是UTF-8,你可以使用'preg_replace'和'u'標誌:'preg_replace('/ \ s +/u','',$ clearedString);' – Artefacto 2010-08-29 14:22:55

+0

@Artefacto謝謝。您能否告訴我,假設只要輸入採用UTF-8編碼,preg_replace對大多數語言都適用,是否安全? – Jithin 2010-08-29 14:38:46

-3

輸入不是Multi-Byte因此mb函數失敗。

+0

確定。但是,如果我的輸入是UTF-8,你能解釋一下我們何時應該使用mb_ereg_replace而不是preg_replace。 目前我通過英文文本爲$ name。但如果明天我使用其他語言,說印地語會讓我的代碼崩潰? – Jithin 2010-08-29 12:48:50

+0

錯誤。多字節擴展可以處理單字節編碼。 – Artefacto 2010-08-29 13:21:20

+0

@Artefacto:好的,我的壞。 – shamittomar 2010-08-29 15:22:29

-1
function create_slug_html($string, $ext='.html'){  
    $replace = '-';   
    $string=strtolower($string);  
    $string=trim($string); 

    mb_regex_encoding("UTF-8"); 
    //regex could also be \W 
    $string= mb_ereg_replace('[^\w]', ' ', $string); 
    $string= mb_ereg_replace('\s+', ' ', $string); 

    //remove query string  
    if(preg_match("#^http(s)?://[a-z0-9-_.]+\.[a-z]{2,4}#i",$string)){   
     $parsed_url = parse_url($string);   
     $string = $parsed_url['host'].' '.$parsed_url['path'];   
     //if want to add scheme eg. http, https than uncomment next line   
     //$string = $parsed_url['scheme'].' '.$string;  
    }  
    //replace/and . with white space  
    $string = preg_replace("/[\/\.]/", " ", $string); 

    // $string = preg_replace("/[^a-z0-9_\s-]/", "", $string); 

    //remove multiple dashes or whitespaces  
    $string = preg_replace("/[\s-]+/", " ", $string); 

    //convert whitespaces and underscore to $replace  
    $string = preg_replace("/[\s_]/", $replace, $string);  
    //limit the slug size  
    $string = substr($string, 0, 200);  
    //slug is generated  
    return ($ext) ? $string.$ext : $string; 

}

請檢查是否確定和支持英文和Unicode

+0

雖然只有代碼的答案是不被禁止的,請理解,這是一個Q&A社區,而不是衆包的問題社區,而且通常,如果OP瞭解代碼被髮布爲答案,則他/她將自己提出類似的解決方案,並且不會在第一時間發佈問題。因此,請通過解釋* how *和/ or * why * it的作用,爲您的答案和/或代碼提供背景。 – XenoRo 2016-07-24 17:17:16