Dar*_*ein 6 php url mod-rewrite slug
我正在寻找创建一个URL字符串,就像SO用于问题链接的那样.我不是在重写url(mod_rewrite).我正在寻找在页面上生成链接.
示例:问题名称为:
Is it better to use ob_get_contents() or $text .= ‘test’;
Run Code Online (Sandbox Code Playgroud)
该URL最终为:
http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test
Run Code Online (Sandbox Code Playgroud)
我感兴趣的部分是:
is-it-better-to-use-obgetcontents-or-text-test
Run Code Online (Sandbox Code Playgroud)
所以基本上我正在寻找清除任何不是字母数字的东西,同时仍然保持URL可读.我创建了以下内容,但我不确定它是否是最好的方式,或者它是否涵盖了所有可能性:
$str = urlencode(
strtolower(
str_replace('--', '-',
preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'),
trim($urlPart)))));
Run Code Online (Sandbox Code Playgroud)
所以基本上:
strtolower()urlencode() - 可能不需要,但只是为了好的措施.正如您已经指出的那样,在这种情况下不需要urlencode(),也不需要trim().如果我理解正确,第4步是避免连续多次破折号,但它不会阻止两个以上的破折号.另一方面,连接两个单词(如"大规模")的破折号将被您的解决方案删除,而它们似乎保留在SO上.
我不确定这是否是最好的方法,但这是我的建议:
$str = strtolower(
preg_replace( array('/[^a-z0-9\- ]/i', '/[ \-]+/'), array('', '-'),
$urlPart ) );
Run Code Online (Sandbox Code Playgroud)
所以: