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);
$ CleanedString هو نفسه إذا كان اسم $ في الحالة أعلاه. ما الخطأ الذي افعله؟
المحلول
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);
نصائح أخرى
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
المدخلات ليست متعدد البايت ومن هنا mb
تفشل الوظيفة.
لا تنتمي إلى StackOverflow