【发布时间】:2011-03-08 04:54:27
【问题描述】:
当我回显下面的变量时,空格表示为%20。
$row["title"]
因此,例如,如果 $row["title"] 等于“葡萄牙粉碎朝鲜”,则它会回显为 Portugal%20Crushes%20North%20Korea。
在我的源代码中,如何将每个 %20 替换为破折号?
提前致谢,
约翰
【问题讨论】:
-
你为什么要把'%20's放在首位?
当我回显下面的变量时,空格表示为%20。
$row["title"]
因此,例如,如果 $row["title"] 等于“葡萄牙粉碎朝鲜”,则它会回显为 Portugal%20Crushes%20North%20Korea。
在我的源代码中,如何将每个 %20 替换为破折号?
提前致谢,
约翰
【问题讨论】:
看起来您在这里所做的是在标题进入数据库之前对其进行编码!
我不会这样做。不要为 DB 编码数据,而是在将结果循环到页面时对其进行编码,或者更好的是,添加一个名为 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,而且还可以创建一个时尚、优雅、安全格式化的字符串。
蛞蝓的最佳形式是a-zA-Z0-9 - _。
【讨论】:
两者都应该这样做
$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 — 解码 URL 编码的字符串【讨论】:
$row['title'] 首先可能不包含 %20 的空格。当您单击链接时,浏览器会自行更改。如果您希望链接带有破折号,请在创建链接之前尝试str_replace(' ', '-', $row['title'])。
您的数据可能是 url 编码的 - 使用 rawurldecode($row['title']) 将其取回。
【讨论】:
如何将每个 %20 替换为破折号?
str_replace('%20', '-', $row['title']);
【讨论】: