gpt4 book ai didi

php - 清理放置在 URL 中的字符串的最佳方法是什么,例如 SO 上的问题名称?

转载 作者:可可西里 更新时间:2023-11-01 13:23:43 24 4
gpt4 key购买 nike

我希望创建一个 URL 字符串,就像 SO 用于问题链接的那样。我不打算重写 url (mod_rewrite)。我正在考虑在页面上生成链接。

示例:问题名称是:

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 可读。我创建了以下内容,但我不确定它是否是最好的方法或者它是否涵盖了所有可能性:

$str = urlencode(
strtolower(
str_replace('--', '-',
preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'),
trim($urlPart)))));

所以基本上:

  1. 修剪
  2. 将任何非字母数字加空格替换为空
  3. 然后用破折号替换所有不是字母数字的内容
  4. 将 -- 替换为 -。
  5. strtolower()
  6. urlencode() -- 可能不需要,但只是为了很好的衡量标准。

最佳答案

正如您已经指出的,在这种情况下不需要 urlencode(),也不需要 trim()。如果我理解正确的话,第 4 步是为了避免连续出现多个破折号,但它不会阻止超过两个破折号。另一方面,连接两个词的破折号(如“大规模”)将被您的解决方案删除,而它们似乎保留在 SO 上。

我不确定这是否真的是最佳方法,但这是我的建议:

$str = strtolower( 
preg_replace( array('/[^a-z0-9\- ]/i', '/[ \-]+/'), array('', '-'),
$urlPart ) );

所以:

  1. 删除任何既不是空格、破折号也不是字母数字的字符
  2. 用单个破折号替换任何连续数量的空格或破折号
  3. strtolower()

关于php - 清理放置在 URL 中的字符串的最佳方法是什么,例如 SO 上的问题名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com