2010-08-29 15 views
5

Boş bir string ile tüm string olmayan karakterleri boşluklar için bekliyoruz ve tüm çoklu boşlukları tek bir boşluk olarak bir araya getirmeye çalışıyorum.PHP mb_ereg_replace preg_replace amaçlandığı şekilde çalışmıyor

Aşağıdaki kod bunu yapar. Mb_ereg_replace kullanmaya çalıştığımda hiçbir şey olmuyor.

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

$ cleaningString, yukarıdaki durumda $ name ise bunun aynısıdır. Neyi yanlış yapıyorum?

cevap

10

mb_ereg_replace ayırıcılar kullanmaz. Ayrıca kodlamayı daha önce belirtmeniz gerekebilir veya olmayabilir.

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

Yaptığım hata buydu. Girişim UTF-8 ise hangi yöntemin kullanılacağı konusunda bir öneri var mı? – Jithin

+0

@Jithin Eğer UTF-8 ise 'preg_replace' u' flag: 'preg_replace ('/ \ s +/u', '', $ cleaningString);' – Artefacto

+0

@Artefacto Teşekkür ile kullanabilirsiniz. Eğer girdi UTF-8 kodlamasında olduğu sürece, preg_replace çoğu dil için çalışacağını varsayabilir misiniz? – Jithin

-3

Girdi Multi-Byte değil, dolayısıyla mb işlevi başarısız oluyor.

+0

Tamam ingilizce ve unicode destekleyen ediniz. Ama eğer girdim UTF-8 ise, preg_replace yerine mb_ereg_replace kullanmamız gerektiğini açıklar mısınız? Şu anda ingilizce metni $ name olarak geçtim. Ama yarın başka bir dil kullanırsam Hintçe kodum kırılacak mı? – Jithin

+0

Yanlış. Çok baytlı uzantı, tek baytlı kodlamaları işleyebilir. – Artefacto

+0

@Artefacto: Tamam, kötüyüm. – shamittomar

-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; 

}

onu ok kontrol edip

+0

Yalnızca kod yanıtları yasak değilken, lütfen bunun bir kalabalığın kaynağı olmaktan ziyade bir Soru-Cevap topluluğu olduğunu ve genellikle OP'nin bir cevap olarak gönderildiği kodu anlaması halinde, kendi başına benzer bir çözüm bulması gerektiğini anlayın. ve ilk etapta bir soru göndermediler. Bu nedenle, lütfen * nasıl * ve/veya * neden * çalıştığını açıklayarak cevabınıza ve/veya kodunuza bağlam sağlayın. – XenoRo