preg_replace 阿拉伯文标题,如 Hello-welcome-here
preg_replace arabic title like مرحبا-اهلاً-بك-هنا
伙计们,我已经尝试了很多功能,但没有一个能以应有的方式帮助我。
我有 htaccess 可以将 URL 替换为友好的 URL 就像 (test-test-test-test)
在英语中一切正常,但在阿拉伯语中不工作(مرحبا-مرحبا-مرحبا-مرحبا) 不工作 可能
// English function work fine! replace long title with dashes
// ex: hello-world-how-is-everything
function seoUrl($string) {
$string = strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
$string = preg_replace("/[\s-]+/", " ", $string);
$string = preg_replace("/[\s_]/", "-", $string);
return $string;
}
所以我希望它能用阿拉伯语工作..
谢谢
<?php
function seoUrl($string) {
$string = strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[chr(0600)-chr(0600FF)a-z0-9_\s-]/is", "", $string);
$string = preg_replace("/[\s-]+/", " ", $string);
$string = preg_replace("/[\s_]/", "-", $string);
return $string;
}
var_dump(seoUrl("مرحبا-مرحبا-مرحبا-مرحبا"));
不知道这是不是你想要的
您需要在几个地方修复您的代码,主要是通过匹配任何 Unicode letters/digits 并将多个连续连字符或白色 space 替换为单个连字符。另外,你的替换也需要调整:
function seoUrl($string) {
$string = mb_strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[^\w\s-]+/u", " ", $string);
$string = preg_replace("/[\s-]+/u", " ", $string);
$string = preg_replace("/[\s_]+/u", "-", $string);
return $string;
}
echo seoUrl("Test--++_-__-Test----Test$#%#Test") . PHP_EOL;
echo seoUrl("مرحبا--++_-__مرحباt--مرحباst$#%#مرحبا") . PHP_EOL;
// => test-test-test-test
// => مرحبا-مرحباt-مرحباst-مرحبا
参见PHP demo。
备注:
mb_strtolower($string);
- 处理Unicode字符串,首选mb_strtolower
preg_replace("/[^\w\s-]+/u", " ", $string)
- 使用 /u
标志,\w
和 \s
匹配任何 Unicode 单词和白色 space 字符,因此您不再删除阿拉伯语和其他 letters/digits;请注意,您需要用 space 替换匹配项,而不是此处的空字符串
preg_replace("/[\s-]+/u", " ", $string)
和 preg_replace("/[\s_]+/u", "-", $string)
- 添加了 u
标志,+
确保替换整个连续的匹配块,而不是一个接一个地替换字符。
伙计们,我已经尝试了很多功能,但没有一个能以应有的方式帮助我。
我有 htaccess 可以将 URL 替换为友好的 URL 就像 (test-test-test-test)
在英语中一切正常,但在阿拉伯语中不工作(مرحبا-مرحبا-مرحبا-مرحبا) 不工作 可能
// English function work fine! replace long title with dashes
// ex: hello-world-how-is-everything
function seoUrl($string) {
$string = strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
$string = preg_replace("/[\s-]+/", " ", $string);
$string = preg_replace("/[\s_]/", "-", $string);
return $string;
}
所以我希望它能用阿拉伯语工作.. 谢谢
<?php
function seoUrl($string) {
$string = strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[chr(0600)-chr(0600FF)a-z0-9_\s-]/is", "", $string);
$string = preg_replace("/[\s-]+/", " ", $string);
$string = preg_replace("/[\s_]/", "-", $string);
return $string;
}
var_dump(seoUrl("مرحبا-مرحبا-مرحبا-مرحبا"));
不知道这是不是你想要的
您需要在几个地方修复您的代码,主要是通过匹配任何 Unicode letters/digits 并将多个连续连字符或白色 space 替换为单个连字符。另外,你的替换也需要调整:
function seoUrl($string) {
$string = mb_strtolower($string);
$string = str_replace('&',' ',$string);
$string = preg_replace("/[^\w\s-]+/u", " ", $string);
$string = preg_replace("/[\s-]+/u", " ", $string);
$string = preg_replace("/[\s_]+/u", "-", $string);
return $string;
}
echo seoUrl("Test--++_-__-Test----Test$#%#Test") . PHP_EOL;
echo seoUrl("مرحبا--++_-__مرحباt--مرحباst$#%#مرحبا") . PHP_EOL;
// => test-test-test-test
// => مرحبا-مرحباt-مرحباst-مرحبا
参见PHP demo。
备注:
mb_strtolower($string);
- 处理Unicode字符串,首选mb_strtolower
preg_replace("/[^\w\s-]+/u", " ", $string)
- 使用/u
标志,\w
和\s
匹配任何 Unicode 单词和白色 space 字符,因此您不再删除阿拉伯语和其他 letters/digits;请注意,您需要用 space 替换匹配项,而不是此处的空字符串preg_replace("/[\s-]+/u", " ", $string)
和preg_replace("/[\s_]+/u", "-", $string)
- 添加了u
标志,+
确保替换整个连续的匹配块,而不是一个接一个地替换字符。