【问题标题】:Replace ampersand(&) into %26 in the query string [closed]在查询字符串中将 & 替换为 %26 [关闭]
【发布时间】:2014-06-24 04:19:16
【问题描述】:

我得到的查询字符串为q=pen&fq[category]=Pens & Refills&fq[category_id]=34,如何仅在此Pens & Refills 中将& 替换为%26,而不是全部&。请有人帮助我使用正则表达式模式来做到这一点。

【问题讨论】:

  • “我正在获取查询字符串”是什么意思?一开始是如何以及为什么搞砸的?
  • 使用$_SERVER['QUERY_STRING']我得到查询字符串
  • 我的意思是为什么查询字符串一开始就搞砸了?

标签: php regex url


【解决方案1】:

如果您出于某种原因确实需要替换该字符,您可以在不使用正则表达式的情况下执行此操作。

$string = str_replace(' & ', ' %26 ', $string);

【讨论】:

  • 并非所有&,仅当类别具有&
  • 是的,它成功了。谢谢。对于简单的事情,我把它复杂化了:-(
  • 别担心,很高兴我能帮上忙。
【解决方案2】:

像这样:

$regex = "~[ ]\K&~";
$replaced = preg_replace($regex,"%26",$string);

demo,看到底部的替换。

说明

  • [ ] 匹配一个空格。您不需要括号,但这样更容易阅读。
  • \K 告诉引擎从整体匹配中删除迄今为止匹配的内容
  • & 匹配我们的字符,我们知道它是正确的,因为它前面有一个空格。
  • 我们将其替换为%26

不支持\K的语言的选项2

我们可以使用后视:

(?<=[ ])&

选项 3 适用于既不支持 \K 也不支持后视的语言

我们会使用捕获组并在 lambda 中替换第 1 组:

[ ](&)

【讨论】:

  • 仅供参考,添加了其他语言的演示、解释和选项。 :)
【解决方案3】:

您可以使用积极的向后看,

$regex = "~(?<=Pens ).~";
$replaced = preg_replace($regex,"%26",$string);

DEMO

你的代码是,

<?php
$string = 'q=pen&fq[category]=Pens & Refills&fq[category_id]=34';
$regex = "~(?<=Pens ).~";
$replaced = preg_replace($regex,"%26",$string);
echo $replaced;
?>

更新:

您似乎想替换一个前后有空格的&amp; 符号。

<?php
$string = 'q=pen&fq[category]=Pens & Refills&fq[category_id]=34';
$regex = "~ & ~";
$replaced = preg_replace($regex," %26 ",$string);
echo $replaced;
?> //=> q=pen&fq[category]=Pens %26 Refills&fq[category_id]=34

【讨论】:

  • 谢谢。笔不是静态的,它是动态的类别名称。需要更改的只有类别有&amp;
  • @Rajツ 似乎您想替换前后有空格的&amp; 符号。我更新了我的代码。
猜你喜欢
  • 2021-06-29
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2014-03-30
  • 2014-03-06
  • 2016-06-10
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多