2010-08-29 19 views
5

Ich versuche, in einer Zeichenfolge alle Nicht-Wort-Zeichen durch leere Zeichenfolge für Leerzeichen und die Summe aller mehrere Leerzeichen als ein einziges Leerzeichen zu ersetzen.PHP mb_ereg_replace nicht ersetzen, während preg_replace wie vorgesehen funktioniert

Der folgende Code tut dies.

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

Aber wenn ich versuche, mb_ereg_replace zu verwenden, passiert nichts.

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

$ cleanedString ist das gleiche wie das, wenn $ name im obigen Fall. Was mache ich falsch?

Antwort

10

mb_ereg_replace verwendet keine Separatoren. Möglicherweise müssen Sie die Kodierung auch vorher angeben.

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

Danke das war der Fehler, den ich gemacht habe. Wenn meine Eingabe UTF-8 ist, gibt es eine Empfehlung bezüglich der zu verwendenden Methode? – Jithin

+0

@Jithin Wenn es UTF-8 ist, können Sie auch 'preg_replace' mit dem 'u'-Flag verwenden:' preg_replace ('/\ s +/u ',' ', $ gereinigterString); ' – Artefacto

+0

@Artefacto Vielen Dank. Können Sie mir bitte sagen, ob es sicher ist anzunehmen, dass preg_replace für die meisten Sprachen funktionieren wird, solange die Eingabe in UTF-8 kodiert ist? – Jithin

-3

Der Eingang ist nicht Multi-Byte daher die mb Funktion schlägt fehl.

+0

ok unterstützen. Aber kannst du bitte erklären, wann wir mb_ereg_replace anstelle von preg_replace verwenden sollten, wenn meine Eingabe in UTF-8 ist. Derzeit habe ich englischen Text als $ name übergeben. Aber wenn ich morgen eine andere Sprache benutze, wird Hindi meinen Code brechen? – Jithin

+0

Falsch. Die Multibyte-Erweiterung kann Einzelbyte-Kodierungen verarbeiten. – Artefacto

+0

@Artefacto: OK, mein schlechtes. – 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; 

}

überprüfen Sie bitte ist es ok und Englisch und Unicode

+0

Während Code-only-Antworten nicht verboten sind, Bitte haben Sie Verständnis dafür, dass es sich um eine Q & A-Community handelt und nicht um eine Crowd-Sourcing-Community. Wenn der OP den Code als Antwort verstanden hätte, hätte er/sie normalerweise eine ähnliche Lösung gefunden und hätte überhaupt keine Frage gestellt. Bitte geben Sie den Kontext für Ihre Antwort und/oder Ihren Code an, indem Sie erklären * wie * und/oder * warum * es funktioniert. – XenoRo

Verwandte Themen