【问题标题】:Replacing %20 with a Dash用破折号替换 %20
【发布时间】:2011-03-08 04:54:27
【问题描述】:

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

$row["title"]

因此,例如,如果 $row["title"] 等于“葡萄牙粉碎朝鲜”,则它会回显为 Portugal%20Crushes%20North%20Korea

在我的源代码中,如何将每个 %20 替换为破折号?

提前致谢,

约翰

【问题讨论】:

  • 你为什么要把'%20's放在首位?

标签: php html


【解决方案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 手册

【讨论】:

  • 谢谢...这看起来很有希望...但它不起作用。我将此变量用作超链接的一部分。当我将鼠标悬停在超链接上时,会有一些我想要破折号的空格。当我点击超链接时,%20 仍然出现在我希望破折号所在的 URL 中。
  • @John $row['title'] 首先可能不包含 %20 的空格。当您单击链接时,浏览器会自行更改。如果您希望链接带有破折号,请在创建链接之前尝试str_replace(' ', '-', $row['title'])
【解决方案3】:

您的数据可能是 url 编码的 - 使用 rawurldecode($row['title']) 将其取回。

【讨论】:

  • 好的...谢谢。添加破折号代替 %20s 怎么样?
  • 其实应该是rawurldecode。注意空格不是用 + 编码的。
【解决方案4】:

如何将每个 %20 替换为破折号?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多