我将这个PHP函数用于SEO网址。它的拉丁语很好用,但我的网址是西里尔字母。这个正则表达式 - /[^a-z0-9_\s-]/
不适用于西里尔字符,请帮助我使其适用于非拉丁字符。
function seoUrl($string) {
// Lower case everything
$string = strtolower($string);
// Make alphanumeric (removes all other characters)
$string = preg_replace('/[^a-z0-9_\s-]/', '', $string);
// Clean up multiple dashes or whitespaces
$string = preg_replace('/[\s-]+/', ' ', $string);
// Convert whitespaces and underscore to dash
$string = preg_replace('/[\s_]/', '-', $string);
return $string;
}
答案 0 :(得分:1)
你需要使用西班牙语字母的Unicode脚本,幸运的是PHP PCRE使用\p{Cyrillic}
支持它。此外,您必须设置u
(unicode)标志来预测引擎行为。您可能还需要使用i
标记来启用不区分大小写,例如A-Z
:
~[^\p{Cyrillic}a-z0-9_\s-]~ui
您无需双重转义\s
。
PHP代码:
preg_replace('~[^\p{Cyrillic}a-z0-9_\s-]+~ui', '', $string);
答案 1 :(得分:0)
要详细了解 Unicode正则表达式,请参阅this article。
tar -tvf <tar-file> -R | awk '
BEGIN{
getline;
f=$8;
s=$5;
}
{
offset = int($2) * 512 - and((s+511), -512)
print offset,s,f;
f=$8;
s=$5;
}'
或\p{L}
匹配任何语言的任何类型的信件。
要仅匹配西里尔字符,请使用\p{Letter}
由于西里尔字符不是标准的ASCII字符,因此必须使用\p{Cyrillic}
标志/修饰符,因此正则表达式将根据需要识别Unicode字符。
在处理unicode字符时,请务必使用u
代替mb_strtolower
。
因为您将所有字符转换为小写,所以您不必使用strtolower
正则表达式/修饰符。
以下 PHP 代码应该适合您:
i
此外,请注意function seoUrl($string) {
// Lower case everything
$string = mb_strtolower($string);
// Make alphanumeric (removes all other characters)
$string = preg_replace('/[^\p{Cyrillic}a-z0-9\s_-]+/u', '', $string);
// Clean up multiple dashes or whitespaces
$string = preg_replace('/[\s-]+/', ' ', $string);
// Convert whitespaces and underscore to dash
$string = preg_replace('/[\s_]/', '-', $string);
return $string;
}
匹配所有Cyrillic Supplementary characters和\p{InCyrillic_Supplementary}
匹配所有non-Supplementary Cyrillic characters。