用破折号替换 %20
Posted
技术标签:
【中文标题】用破折号替换 %20【英文标题】:Replacing %20 with a Dash 【发布时间】:2011-03-08 04:54:27 【问题描述】:当我回显下面的变量时,空格表示为%20
。
$row["title"]
因此,例如,如果 $row["title"]
等于“葡萄牙粉碎朝鲜”,则它会回显为 Portugal%20Crushes%20North%20Korea
。
在我的源代码中,如何将每个 %20
替换为破折号?
提前致谢,
约翰
【问题讨论】:
你为什么要把'%20's放在首位? 【参考方案1】:看起来您在这里所做的是在标题进入数据库之前对其进行编码!
我不会这样做。不要为 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 - _
。
【讨论】:
这看起来很有希望...如何使 slug 变量? 谢谢 RobertPitt... 我现在正在使用生成 slug 的代码,并在数据库中添加了一个 slug 列。现在,我使用 slug 作为链接的一部分。 太好了,通过存储用户视觉所需的字符串 1 和 url 的所需版本将使您的生活更轻松,请始终尝试在用户输入时存储原始数据,这样您就可以随时做到与数据不同的东西,通过存储更改后的数据,您会发现做更多的事情变得更加困难,因为您在将其保存到数据库之后将其存储了 :) 还忘了提及,如果您没有在 URI 中传递 id 编号,请确保您的 slug 列设置为 UNIQUE,这样当您从 URL 接收 slug 时,您可以检查它而不会受到任何欺骗。 【参考方案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
— 解码 URL 编码的字符串
【讨论】:
谢谢...这看起来很有希望...但它不起作用。我将此变量用作超链接的一部分。当我将鼠标悬停在超链接上时,会有一些我想要破折号的空格。当我点击超链接时,%20 仍然出现在我希望破折号所在的 URL 中。 @John$row['title']
首先可能不包含 %20
的空格。当您单击链接时,浏览器会自行更改。如果您希望链接带有破折号,请在创建链接之前尝试str_replace(' ', '-', $row['title'])
。【参考方案3】:
您的数据可能是 url 编码的 - 使用 rawurldecode($row['title'])
将其取回。
【讨论】:
好的...谢谢。添加破折号代替 %20s 怎么样? 其实应该是rawurldecode。注意空格不是用 + 编码的。【参考方案4】:如何将每个 %20 替换为破折号?
str_replace('%20', '-', $row['title']);
【讨论】:
以上是关于用破折号替换 %20的主要内容,如果未能解决你的问题,请参考以下文章