如何使用preg_replace仅检查字母数字和其他语言字母?

时间:2019-01-28 14:22:51

标签: php preg-replace

我只需要用我的母语字母数字和字符创建一个SEO友好字符串。它是僧伽罗。

我期望的字符串应该是这样的:

$myString = "this-is-a-දහසක්-බාධක-දුක්-කම්කටොලු-මැදින්-ලෝකය-දිනන්නට-වෙර-දරන";

我正在使用一个函数来创建这样的字符串。该功能如下:

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;
}

此功能仅适用于英文字符和上述字符串的输出,如下所示:

$title = seoUrl("this-is-a-දහසක්-බාධක-දුක්-කම්කටොලු-මැදින්-ලෝකය-දිනන්නට-වෙර-දරන");
echo $title; // this-is-a-

有人可以告诉我如何修改上述功能以获取所有字符(包括我的母语字符)

希望有人可以帮助我。谢谢。

2 个答案:

答案 0 :(得分:3)

对统一码使用/u标志,对字母使用\pL,对数字使用\pN

编辑:由于某些多字节字符,mb_ereg_replace是一个不错的选择:

function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = mb_ereg_replace("[^\x0D-\x0E\w\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;
}
$title = seoUrl("this-is-a-දහසක්-බාධක-දුක්-කම්කටොලු-මැදින්-ලෝකය-දිනන්නට-වෙර-දරන");
echo $title;

输出:

this-is-a-දහසක්-බාධක-දුක්-කම්කටොලු-මැදින්-ලෝකය-දිනන්නට-වෙර-දරන

答案 1 :(得分:2)

您使用多字节编码。 preg_replace不适用于多字节编码。您应该使用mb_ereg_replace函数