PHP mb_ereg_replace ersetzt nicht während preg_replace funktioniert wie beabsichtigt
Frage
Ich versuche, in einem String alle nicht Wortzeichen mit leeren String zu ersetzen, für den Raum und die Put zusammen alle mehrere Räume als ein einziger Raum erwartet.
Code Nach tut dies.
$cleanedString = preg_replace('/[^\w]/', ' ', $name);
$cleanedString = preg_replace('/\s+/', ' ', $cleanedString);
Aber wenn ich versuche, passiert nichts mb_ereg_replace zu verwenden.
$cleanedString = mb_ereg_replace('/[^\w]/', ' ', $name);
$cleanedString = mb_ereg_replace('/\s+/', ' ', $cleanedString);
ist $ cleanedString gleiche wie der, dass, wenn $ name im obigen Fall. Was mache ich falsch?
Lösung
mb_ereg_replace
keine Separatoren verwenden. Sie können oder auch nicht vor der Codierung angeben müssen.
mb_regex_encoding("UTF-8");
//regex could also be \W
$cleanedString = mb_ereg_replace('[^\w]', ' ', $name);
$cleanedString = mb_ereg_replace('\s+', ' ', $cleanedString);
Andere Tipps
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;
}
Bitte überprüfen ist es ok und Englisch und Unicode
Unterstützung Der Eingang ist nicht Multi-Byte daher die mb
Funktion fehlschlägt.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow