为中文字符创建 URL slug。使用 PHP

Posted

技术标签:

【中文标题】为中文字符创建 URL slug。使用 PHP【英文标题】:create URL slugs for chinese characters. Using PHP 【发布时间】:2014-06-07 23:08:58 【问题描述】:

我的用户有时会使用中文字符作为他们输入的标题。

我的 slug 格式为 /stories/:id-:name,其中一个示例可能是 /stories/1-i-love-php

我如何允许汉字?

我用谷歌搜索并在here 上找到了这个答案的日文版。

不太懂日语,所以问的是中文版的。

谢谢。

【问题讨论】:

你在用wordpress吗? 我没有使用 wordpress。我正在使用 PHP 编写自己的 webapp。 请提供带有中文字符的示例网址以供我测试和检查: 我已经给出了解决方案,你可以试试... 【参考方案1】:

我已经测试过孟加拉语字符

它可能会起作用。尝试这个: 首先编码页面(在页面中写入代码)必须转换为UTF-8编码类型,然后再编写代码。

代码在这里:

function to_slug($string, $separator = '-') 
    $re = "/(\\s|\\".$separator.")+/mu";
    $str = @trim($string);
    $subst = $separator;
    $result = preg_replace($re, $subst, $str);
    return $result;


$id=34;
$string_text="আড়াইহাজারে দেড় বছরের ---  শিশুর -গলায় ছুরি";
$base_url="http://example.com/";
echo $target_url=$base_url.$id."-". @to_slug($string_text);

var_dump($target_url);

输出:

http://example.com/34-আড়াইহাজারে-দেড়-বছরের-শিশুর-গলায়-ছুরি

string 'http://example.com/34-আড়াইহাজারে-দেড়-বছরের-শিশুর-গলায়-ছুরি' (length=136)

【讨论】:

很抱歉打扰您,但是您的正则表达式也允许未知字符,例如 @#!!?-=+ ,有没有办法允许中文单词同时又防止未知字符跨度>

以上是关于为中文字符创建 URL slug。使用 PHP的主要内容,如果未能解决你的问题,请参考以下文章

PHP 获取slug(URL友好字符串)

php PHP的简单slugify功能。为传递的字符串创建一个slug,同时考虑国际字符。

将任何标题转换为 url slug 并从 url slug 转换为标题

如何使用 PHP 在 Laravel 7 中将 PascalCase 字符串转换为可用的 slug?

创建用户后无法为“page_slug”生成 URL

生成 SEO 友好的 URL(slug)[关闭]