这是我用来清理网址的函数:
function make_clean_url($url){
$url_word_separator = "-";
// To replace new lines with space
$url = preg_replace('/\n+/', " ", $url);
// To replace spaces with -
$url = preg_replace('/\s+/', "-", $url);
// To replace dot(s) with -
$url = preg_replace('/\.+/', "-", $url);
// To remove html-entitis characters i.e «
$url = preg_replace("/&#?[a-z0-9]+;/i","",$url);
// To remove eveything except numbers, dash, number-sign, space and alphabet characters
$url = preg_replace('/[^\x{600}-\x{6FF}a-zA-Z0-9 #\-]/u', '', $url); -- issue on this
// To trim surrounded spaces and dashs
$url = trim($url, " $url_word_separator");
return $url;
}
此正则表达式也适用于大多数URL。 Juse有一个例外:
echo make_clean_url("اﺻﻠﯽ ﺗﺮﯾﻦ ﻓﺮق اﺳﺘﻌﺎره ﻣﺼﺮﺣﻪ و ﻣﮑﻨﯿﻪ ﭼﯿﺴﺖ؟");
//=> ا--ق-اره--و--؟
看到了吗?它删除了大多数字母字符。为什么?这些字符使用\x{600}-\x{6FF}
允许的波斯语。那么为什么要删除它们?
答案 0 :(得分:1)
要删除的那些字符不在\u0600-\u06ff
之外,因此可以预期该行为。这些是波斯字母的罕见形式,例如ﭼ
与چ
不同。
您可能需要使用\p{Arabic}
而不是\x{0600}-\x{06ff}
来包含阿拉伯文字。这就是整个功能:
function make_clean_url($url) {
$url_word_separator = '-';
$url = preg_replace('/\R+/', ' ', $url);
$url = preg_replace('/[\s.]+/', '-', $url);
$url = preg_replace('/&#?[a-z0-9]+;|[^\p{Arabic}a-z0-9#-]+/ui', '', $url);
$url = trim($url, " $url_word_separator");
return $url;
}