用短划线替换%20

时间:2010-06-25 09:05:34

标签: php html

当我回显下面的变量时,空格表示为%20

$row["title"]

因此,举例来说,如果$row["title"]等于“葡萄牙粉碎朝鲜”,它就会以Portugal%20Crushes%20North%20Korea回响。

在我的源代码中,如何用短划线替换每个%20

提前致谢,

约翰

4 个答案:

答案 0 :(得分:4)

看起来你在这里做的是在进入数据库之前对标题进行编码!

我不会这样做。不要为数据库编码数据,而是在将结果循环到页面时对其进行编码,或者更好的是,添加一个名为slug的额外列。

这意味着标题为Some Clean Title Here,在slug列中您有some-clean-title-here,因此您使用$row['slug']

然后在您的链接中使用

<a href="site_root.tld/post/<?=$row['slug']?>"><?=$row['title'];?></a>

始终使用mysql_real_escape_string转义数据,并使用一个不仅仅对db条目中的slug进行urlencode的函数,还可以创建一个时尚,优雅,安全格式化的字符串。

slu a的最佳形式仅为a-zA-Z0-9 - _

答案 1 :(得分:2)

您的数据可能是网址编码的 - 请使用rawurldecode($row['title'])将其恢复。

答案 2 :(得分:2)

两者都应该

$string = 'Portugal%20Crushes%20North%20Korea';

echo str_replace('%20', '-', $string);
echo str_replace(' ', '-', rawurldecode($string));

Url虽然不是必须在替换之前解码字符串。只有在字符串中有其他编码字符时才有意义,例如:

echo rawurlencode('Portugal Crushes North Korea (7:0)');
// Portugal%20Crushes%20North%20Korea%20%287%3A0%29

应用解码后,替换破折号的空间为

Portugal-Crushes-North-Korea-(7:0)

参见PHP手册

答案 3 :(得分:1)

  

我怎么能用短划线替换每个%20?

str_replace('%20', '-', $row['title']);