What is the best way to clean a string for placement in a URL, like the question name on SO?(清理放置在 URL 中的字符串的最佳方法是什么,例如 SO 上的问题名称?)
问题描述
我希望创建一个 URL 字符串,就像 SO 用于问题链接的 URL 字符串一样.我不是在考虑重写 url (mod_rewrite).我正在考虑在页面上生成链接.
I'm looking to create a URL string like the one SO uses for the links to the questions. I am not looking at rewriting the url (mod_rewrite). I am looking at generating the link on the page.
示例:问题名称为:
Is it better to use ob_get_contents() or $text .= ‘test’;
URL 最终是:
http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test
我感兴趣的部分是:
is-it-better-to-use-obgetcontents-or-text-test
所以基本上我希望清除任何不是字母数字的内容,同时仍然保持 URL 可读.我创建了以下内容,但我不确定它是否是最好的方法,或者它是否涵盖了所有可能性:
So basically I'm looking to clean out anything that is not alphanumeric while still keeping the URL readable. I have the following created, but I'm not sure if it's the best way or if it covers all the possibilities:
$str = urlencode(
strtolower(
str_replace('--', '-',
preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'),
trim($urlPart)))));
所以基本上:
- 修剪
- 用空替换任何非字母数字和空格
- 然后用破折号替换所有不是字母数字的内容
- 用-替换-.
strtolower()
urlencode()
-- 可能不需要,但只是为了更好的衡量.
- trim
- replace any non alphanumeric plus the space with nothing
- then replace everything not alphanumeric with a dash
- replace -- with -.
strtolower()
urlencode()
-- probably not needed, but just for good measure.
推荐答案
正如您已经指出的,在这种情况下不需要 urlencode(),trim() 也不需要.如果我理解正确,第 4 步是避免连续出现多个破折号,但它不会阻止超过两个破折号.另一方面,连接两个词的破折号(如大规模")将被您的解决方案删除,而它们似乎保留在 SO 上.
As you pointed out already, urlencode() is not needed in this case and neither is trim(). If I understand correctly, step 4 is to avoid multiple dashes in a row, but it will not prevent more than two dashes. On the other hand, dashes connecting two words (like in "large-scale") will be removed by your solution while they seem to be preserved on SO.
我不确定这是否真的是最佳方法,但这是我的建议:
I'm not sure that this is really the best way to do it, but here's my suggestion:
$str = strtolower(
preg_replace( array('/[^a-z0-9- ]/i', '/[ -]+/'), array('', '-'),
$urlPart ) );
所以:
- 删除任何既不是空格、破折号也不是字母数字的字符
- 用一个破折号替换任意连续数量的空格或破折号
- strtolower()
这篇关于清理放置在 URL 中的字符串的最佳方法是什么,例如 SO 上的问题名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:清理放置在 URL 中的字符串的最佳方法是什么,例
基础教程推荐
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 使用 PDO 转义列名 2021-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01