What I need to do in order to open URLs with special characters

折月煮酒 提交于 2019-12-24 08:29:33

问题


Hi i am trying to make a seo friendly url using php. I am using the follwoing code to converting the url like exapmle.com/post/hi-how-are-you and also using this .htaccess code

RewriteRule ^post/([\w-]+)/?$ single_post.php?blog_title=$1 [L,QSA]

php slug url

function url_slug($str) {   
    $str = mb_strtolower(trim($str), 'UTF-8');
    $str = preg_replace('/[[:^alnum:]]/iu', ' ', $str);
    $str = trim($str);
    $str = preg_replace('/\s+/', '-', $str);
    return $str;
}

But the problem is special character. For example: When i post some turkih character like (tırda bir öğün çok çıktı) the url looks like this

example.com/post/tırda-bir-öğün-çok-çıktı

Everything is ok for the slug but when i open the url i can not GETting any data with (tırda-bir-öğün-çok-çıktı).

What do I need to do in order to open URLs with special characters?

Do we have a chance to print all special characters in English? Like when i post something from data the url_slug can change the special character to english character for example:

tırda bir öğün çok çıktı

converted english character

tirda-bir-ogun-cok-cikti

回答1:


\w matches word characters only where word char is [a-zA-Z0-9_] and it doesn't include all unicode characters.

Change your rule to this:

RewriteRule ^post/([^/]+)/?$ single_post.php?blog_title=$1 [L,QSA]

[^/]+ will match any character that is not / including unicode characters as well.

You may also tweak php code a bit:

function url_slug($str) {   
    $str = mb_strtolower(trim($str), 'UTF-8');
    $str = preg_replace('/[^\pL\pN]+/u', ' ', $str);
    $str = trim($str);
    $str = preg_replace('/\h+/', '-', $str);
    return $str;
}



回答2:


Most common way is to use some mapping where you have non-latin letter as key and Latin letter representation:

$map = [
   'š' => 'sh',
   ...
];

Then you use replace:

str_replace(array_keys($map), array_values($map), $slug);

Another way is using iconv function:

iconv('UTF-8', 'ASCII//TRANSLIT', $slug);


来源:https://stackoverflow.com/questions/49675246/what-i-need-to-do-in-order-to-open-urls-with-special-characters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!