用破折号替换 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用文件名中的破折号替换空格。