<?php
function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
echo create_slug('does this thing work or not');
//returns 'does-this-thing-work-or-not'
?>
function slugify(string) { const a = ‘àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;’ const b = ‘aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh——‘ const p = new RegExp(a.split(”).join(‘|’), ‘g’)
return string.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
.replace(/&/g, '-and-') // Replace & with 'and'
.replace(/[^\w\-]+/g, '') // Remove all non-word characters
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
}
也许你可以在那里添加一个 strtolower?
太棒了!
这是 jquery(客户端)slug 创建器。
$('#title').change(function() {
$(this).val($.trim($(this).val()));
// 去除空格
$(this).val($(this).val().replace(/\s+/g,' '));
// 将多个空格替换为一个空格
$('#url').val($(this).val().toLowerCase());
$('#url').val($('#url').val().replace(/\W/g, ' '));
$('#url').val($.trim($('#url').val()));
$('#url').val($('#url').val().replace(/\s+/g, '-'));
});
不要使用客户端 slug 创建器,因为它可能会被恶意利用。如果攻击者出于某种原因想要将特殊字符插入 slug 中,他们可以轻松绕过客户端脚本并将恶意 slug 发送到服务器。如果服务器不执行任何其他检查/修改提交的 slug(如果它确实执行了,那么客户端 slug 创建器就没有必要),那么攻击者就可以成功利用服务器。
停用词始终是 slug 创建器的不错补充,
function remove_accent($str)
{
$a = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','Ā','ā','Ă','ă','Ą','ą','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','Ē','ē','Ĕ','ĕ','Ė','ė','Ę','ę','Ě','ě','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ģ','Ĥ','ĥ','Ħ','ħ','Ĩ','ĩ','Ī','ī','Ĭ','ĭ','Į','į','İ','ı','IJ','ij','Ĵ','ĵ','Ķ','ķ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ō','ō','Ŏ','ŏ','Ő','ő','Œ','œ','Ŕ','ŕ','Ŗ','ŗ','Ř','ř','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','Ŵ','ŵ','Ŷ','ŷ','Ÿ','Ź','ź','Ż','ż','Ž','ž','ſ','ƒ','Ơ','ơ','Ư','ư','Ǎ','ǎ','Ǐ','ǐ','Ǒ','ǒ','Ǔ','ǔ','Ǖ','ǖ','Ǘ','ǘ','Ǚ','ǚ','Ǜ','ǜ','Ǻ','ǻ','Ǽ','ǽ','Ǿ','ǿ');
$b = array('A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','l','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o');
return str_replace($a, $b, $str);
}
function post_slug($str)
{
return strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'), array('', '-', ''), remove_accent($str)));
}
你还需要删除标点符号
原始代码已经这样做了。插入符号 ^ 在 RegEx 中表示“非”。根据示例,作者只允许字母、数字和连字符;)
精彩的帖子!非常简单且实用。
感谢将其发布到网上。
@Weblap.ro 感谢此特殊字符。删除脚本。这使得此页面非常有用。
Sudeep
Infovinity
另一个产生更好结果的等效函数:http://code.seebz.net/p/to-permalink/
当你的语言是 utf-8(例如“xin chào”)时,如何创建文章 slug?当使用你的函数时,我不希望它变成“xin cho”。
我的函数像你一样
帮我更改 slug,例如字符串:“xin chào”。
谢谢
对于越南语,我使用了这个数组
很酷的技巧,但我可以限制重复的 slug
顶
你需要连接到数据库才能做到这一点。
我一直使用这种快速且不那么脏的方法
$slug = preg_replace(“/\W+/”,”-“,$text);
通过使用 \W+,你可以处理所有非拉丁字符。
无论我在网站上遇到什么麻烦,我都会谷歌搜索我想要的东西,你的链接从未让我失望。谢谢 Chris!
同意
我如何添加一个按钮?这样,当我点击自动生成友好 URL时
内置函数如何处理这种情况?sanitize_title_with_dashes(); 我一直都在使用它。
sanitize_title_with_dashes() 是 wordpress 函数:)。
我的错!我以为你们都在谈论 WordPress :) 对不起!
100%有效
我的标题是 बोन कैंसर: जानें, क्यों नहीं नजरअंदाज करना चाहिए इन संकेतों को?
我想将其更改为 बोन-कैंसर-जानें-क्यों-नही.html
以上代码无法使用,有什么建议吗?
谢谢。
谢谢 Davinder Singh :-)
并且整个代码扩展到德语变音符,真是太棒了
function getSlug($text)
{
$word = strtolower($text);
$word = str_replace(“ä”,”ae”,$word);
$word = str_replace(“ö”,”oe”,$word);
$word = str_replace(“ü”,”ue”,$word);
$word = str_replace(“ß”,”ss”,$word);
$word = str_replace(“&”,”und”,$word);
$text = preg_replace(‘~[^\pL\d]+~u’, ‘-‘, $word);
$text = trim($text, ‘-‘);
$text = iconv(‘utf-8’, ‘us-ascii//TRANSLIT’, $text);
$text = strtolower($text);
$text = preg_replace(‘~[^-\w]+~’, ”, $text);
if (empty($text))
{
return ‘n-a’;
}
return $text;
}
谢谢,它真的很有价值,对我有用…:p
另一种简单的方法
以这种方式创建 slug 仅限于英语字母。最好先使用函数 explode 和空格作为分隔符将其转换为数组,然后使用可选分隔符对其进行合并。
}
此不错的脚本将处理各个方面。包括删除特殊字符和处理不同语言
https://github.com/cocur/slugify
在 WP 中,我使用了一个不错的 文章标题格式化程序 来实现此目的
我创建了一个库来生成 slug:https://github.com/ausi/slug-generator
很棒的工作
这会更高效。
function slugify(string) {
const a = ‘àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;’
const b = ‘aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh——‘
const p = new RegExp(a.split(”).join(‘|’), ‘g’)
如果您使用的是PHP- Codeigniter框架,并且想要在Codeigniter中生成URL slug,请访问以下链接
https://datainflow.com/generate-url-slug-codeigniter/