php - 我需要做什么才能打开带有特殊字符的 URL

标签 php mysql .htaccess slug

您好,我正在尝试使用 php 制作一个 seo 友好的 url。我正在使用以下代码将 url 转换为 exapmle.com/post/hi-how-are-you 并使用此 .htaccess 代码

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

php 别名 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;
}

但问题是特殊字符。例如:当我发布一些像 (tırda bir öğün çok çıktı) 这样的 turkih 字符时,url 看起来像这样

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

对于 slug 来说一切正常,但是当我打开 url 时,我无法使用 (tırda-bir-öğün-çok-çıktı) 获取任何数据。

我需要做什么才能打开带有特殊字符的 URL?

我们有机会用英文打印所有特殊字符吗?就像当我从数据中发布一些东西时,url_slug 可以将特殊字符更改为英文字符,例如:

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

转换后的英文字符

tirda-bir-ogun-cok-cikti

最佳答案

\w 仅匹配单词字符为 [a-zA-Z0-9_] 的单词字符,它不包括所有 unicode 字符。

将您的规则更改为:

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

[^/]+ 将匹配任何不是 / 的字符,包括 unicode 字符。

您也可以稍微调整一下 php 代码:

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

关于php - 我需要做什么才能打开带有特殊字符的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49675246/

相关文章:

apache - 如何停止重写规则?

php - sql查询问题

php - 我为什么要购买这些 Silex 404?

php - 运行时通知 : Declaration of in symfony2

php - 增加新行的值

ruby-on-rails - 使用路由或 mod_rewrite 转发旧 URL 哪个更好?

php - 带下划线正则表达式模式的字母数字

mysql - 如何防止在mysql数据库中创建新表

php - 如何从数据库中获取数据

php - htaccess 带有 .php 的旧文件 没有 php 的新文件