【问题标题】:Replace spaces in href with %20 in php用 php 中的 %20 替换 href 中的空格
【发布时间】:2013-11-22 19:50:06
【问题描述】:

我想用 %20 替换链接中的每个空格。

<a href="Replace the spaces here">Some text</a>

我想得到这个:

<a href="Replace%20the%20spaces%20here">Some text</a>

不是这个:

<a%20href="Replace%20the%20spaces%20here">Some%20text</a>

如何做到这一点? preg_replace? 解决方案(因为我无法发布答案):

$search= '(href="(.*?)")s';
$replace= '';
$newstring= preg_replace_callback($search,create_function('$treffer','urlencode($treffer[0]);'),$string);

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • 为什么首先要有无空格链接?这个页面是如何生成的?
  • 我在这里同意@Pekka웃。首先在 URL 中包含空格是非常糟糕的做法。
  • 我看不出这样做的目的。现代浏览器会自动执行此操作,除非您的用户和/或您使用的是恐龙浏览器。另外,以空格开头的文件是非常糟糕的做法。我建议您开始使用下划线和/或连字符来命名您的文件。
  • 文件名带空格有什么问题?只要他们被正确逃脱?

标签: php html escaping preg-replace href


【解决方案1】:

您应该使用urlencode() 函数作为href 部分。

http://php.net/urlencode

【讨论】:

  • 看到他现在的结果,我怀疑他已经这样做了。
  • 这不太可能有帮助 - 您不能只将 urlencode() 应用于上面的 HTML 代码。
  • 如果你使用 PHP,你肯定应该在你的 URL 上使用现有的编码和解码函数(即使它们没有空格)。
  • @prrstn true,但是您如何将urlencode() 应用于 OP 显示的 HTML 代码?这不是对 OP 情况的有效答案
  • @qwertz 在这种情况下,您将需要一个 HTML 解析器。 How do you parse and process HTML/XML in PHP?
【解决方案2】:

请注意,每个现代浏览器都会很好地处理以下内容:

<a href="Replace the spaces here">Some text</a>

如果您无论如何都坚持这样做,并且假设您不能urlencode() 链接它们被输出之前,您需要使用以下任何一种:

  • preg_replace_callback()
  • DOM 解析器

使用其中一个将允许您仅在需要的地方应用urlencode()

【讨论】:

  • 这是一个糟糕的建议。
  • @SalmanA:不,不是。它告诉他不要打扰,这是正确的,如果他仍然想怎么做,这也是正确的。
  • 您应该始终正确编码 URL;除非你确定href='...' 之间的内容来自哪里。
【解决方案3】:

你可以试试这个:

<a href="<? echo(urlencode("Replace the spaces here")); ?>">Some text</a>

【讨论】:

  • 是的,我想从字符串中找到从 href=" 到 " 的部分,然后执行 urlencode()
  • @qwertz 考虑回复我们的澄清请求
  • @qwertz1029384756 那么,您是说您是在解析现有的 html 而不是编写新页面? (顺便说一句,我还不能要求对主要问题本身进行澄清。)
  • 所以我可以。谢谢! =)
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 2012-03-03
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多