当我回显下面的变量时,空格表示为%20
。
$row["title"]
因此,举例来说,如果$row["title"]
等于“葡萄牙粉碎朝鲜”,它就会以Portugal%20Crushes%20North%20Korea
回响。
在我的源代码中,如何用短划线替换每个%20
?
提前致谢,
约翰
答案 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手册
rawurldecode
- 解码网址编码的字符串答案 3 :(得分:1)
我怎么能用短划线替换每个%20?
str_replace('%20', '-', $row['title']);