【问题标题】:Turning a name into a URL-friendly string in PHP? [duplicate]在 PHP 中将名称转换为对 URL 友好的字符串? [复制]
【发布时间】:2023-03-06 02:44:02
【问题描述】:

可能重复:
URL Friendly Username in PHP?

我有这样的事情:

'mrt1' => 'Zhongxiao Dunhua Sun'

这将包含在这样的锚链接中:

<a href="'. $mrt1 .'">'. $mrt1 .'</a>

我希望输出是这样的:

<a href="zhongxiao-dunhua-sun">Zhongxiao Dunhua Sun</a>

如何做到这一点,以便我可以将该名称转换为 URL 友好的字符串(以便我可以将其放在 href 属性中)?

【问题讨论】:

  • 您的意思是删除除字母数字字符以外的所有内容? (并且小写?)
  • @Jared Farrish 是的,在我猜的单词之间添加斜线
  • 哎呀,我以为这是针对 Javascript 的。所以...'Zhongxiao Dunhua Sun'.toLowerCase().replace(/ /g, '-').replace(/[^a-z\-]/gi, '');
  • @Jared Farrish 哈哈,那是 JavaScript 的吗?也谢谢。
  • @hakre - 你似乎有点胡思乱想...:) 这个功能很时髦,但确实涵盖了我认为应该的领域(使用特殊字符等)。

标签: php


【解决方案1】:
$s = ' Zhongxiao Dunhua Sun ';
$r = preg_replace('/\W+/', '-', strtolower(trim($s)));
echo("$r\n");

【讨论】:

  • 你不应该trim() pre-regex 吗?
  • 这个以及特殊字符和换行符存在一些问题:codepad.org/rJNSQmGJ
  • 运行这段代码对我来说根本没有改变字符串。
  • 不错,但不完整。在preg_replace 之后缺少$s= trim($s, '-');。此外,出于可读性目的,您不应使用 1 个字母的变量。
【解决方案2】:

你也可以试试这个功能..

function create_seo_link($text) {
    $letters = array(
        '–', '—', '"', '"', '"', '\'', '\'', '\'',
        '«', '»', '&', '÷', '>',    '<', '$', '/'
    );

    $text = str_replace($letters, " ", $text);
    $text = str_replace("&", "and", $text);
    $text = str_replace("?", "", $text);
    $text = strtolower(str_replace(" ", "-", $text));

    return ($text);
}

【讨论】:

  • 我一点也不明白。正则表达式确实有时非常有意义。 ;) 但是,看你的函数名,这是来自软件包还是库?
  • 不,我已经创建了它..@JaredFarrish
  • 在上面的评论中查看 Hakre 链接到的问题的答案。我想说这可能是一种更全面的方法,如果有点难以阅读的话。
  • @JaredFarrish 得到了你的观点。谢谢。
  • 一些不同的演示:codepad.org/rJNSQmGJ
【解决方案3】:

PHP 具有使字符串符合 URL 标准的功能:

urlencode($mrt1);

【讨论】:

  • OP 可能不想使用+(出于设计原因...)。不过,这是一个合理的建议。
  • 仅仅这一种方法就可以产生一些(至少在视觉上)恐怖的结果:codepad.org/rJNSQmGJ“漂亮”的网址就这么多......
【解决方案4】:

str_replace() 将空格更改为-strtolower() 更改为小写。

$mrt1 = 'Zhongxiao Dunhua Sun';
$mrt1 = str_replace(' ','-',strtolower($mrt1));

【讨论】:

  • 我不太确定这会涵盖所有情况(例如 OP 可能不想留下的特殊字符,例如 *%$.? 等)。这可能无关紧要,但这是一个很大的差距。
  • 没错,但根据他的例子,这个简单的例子可以工作。如果他有更严格的要求,@leepowers 的回答是更好的解决方案。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多