用破折号替换 %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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC - 如何用破折号替换 %20? [复制]

用破折号替换 URL 中的空格

用破折号替换空格并复制到新列

用 C# 中的常用破折号替换长破折号 [重复]

用空格替换文本区域中的逗号、破折号和输入键

用破折号替换空格并使所有字母变为小写