用破折号替换 URL 中的空格

Posted

技术标签:

【中文标题】用破折号替换 URL 中的空格【英文标题】:Replace spaces with a dash in a URL 【发布时间】:2013-01-14 01:41:07 【问题描述】:

我设法替换了特殊字符,例如:; / 等在我的 URL 中,但现在它又有了空格。这是我的代码:

<h3><a href="<?php echo (isset($row_getDisplay['post_id']) ? $row_getDisplay['post_id'] : ''); ?>_<?php echo str_replace(array(':', '\\', '/', '*'), ' ', urldecode($row_getDisplay['title'])); ?>.html" ><?php echo (isset($row_getDisplay['title']) ? $row_getDisplay['title'] : ''); ?></a></h3>

我希望它喜欢它删除特殊字符以及用破折号替换空格。

【问题讨论】:

很明显你现在有了空格,因为你自己把它们放在那里:str_replace(array(':', '\\', '/', '*'), ' ', urldecode($row_getDisplay['title']));。将其替换为“无”,例如:str_replace('yourChar', '', 'yourString');。之后,您可以用破折号替换剩余的空格。 【参考方案1】:

试试str_replace(' ', '-', $string);

【讨论】:

最简单的解决方案,你可以添加无效字符数组,如 str_replace(array(" ", ";"), array("-", "_"), $str) 当有更多直接和更简单的选项时,我是否会忽略任何 preg_replace 解决方案?像你的?我错过了什么吗?【参考方案2】:

你可以使用 preg_replace:

preg_replace('/[[:space:]]+/', '-', $subject);

这将用一个“-”破折号替换所有空格实例。所以如果你有一个双倍、三倍等空间,那么它仍然会给你一个破折号。

编辑:这是我去年用来整理我的网址的通用函数

    function formatUrl($str, $sep='-')
    
            $res = strtolower($str);
            $res = preg_replace('/[^[:alnum:]]/', ' ', $res);
            $res = preg_replace('/[[:space:]]+/', $sep, $res);
            return trim($res, $sep);
    

它将所有非字母数字字符转换为空格,然后将所有空格转换为破折号,然后修剪字符串末尾/开头的任何破折号。这比必须在 str_replace 中列出特殊字符更好用

【讨论】:

谢谢,我马上试试,如何将generec函数包含到我的代码中, 把它放在一个文件中(例如“helpers.php”),并在文件开头将它包含在你的代码中 在调用函数之前。这样您就可以在多个文件中重复使用它,而无需在每个文件中键入或声明函数。 所以只要把它放在一个文件'helpers.php'中,在代码中包含页面就可以了?

以上是关于用破折号替换 URL 中的空格的主要内容,如果未能解决你的问题,请参考以下文章

用空格替换文本区域中的逗号、破折号和输入键

php 过滤以停止WordPress用文件名中的破折号替换空格。

用破折号替换空格并复制到新列

正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格

用破折号替换空格并使所有字母变为小写

小写字符串并用破折号替换空格[重复]