保留'+';URL变量中的符号


Preserve a '+' symbol in a URL variable

我目前正在处理一个SOAP提要,它需要传递一些特殊变量(从另一个提要中提取)

例如。

+blPsNeYyjvRQhCiHQEISg==

绝对重要的是,变量要按原样发布,但当我在PHP脚本中渲染它时。。它将+符号视为+动作,并将其剥离并尝试执行计算

因此,如果我有blPsNeYyj+vRQhCiHQEISg==,那么字符串将被发布为blPsNeYyj + vRQhCiHQEISg,并导致错误。

如果我用%2b替换+,它是有效的,所以我尝试了URL编码,但它仍然失败。这是因为最后的==必须保持为==

总之,我需要用%2b 替换+的所有实例

我试过

$service = preg_replace("/'+/","%2B",$service);

但这也失败了,只返回NULL

答案:

为了说明这个过程,我一直很简单,但为了让提要正常工作,我不得不使用一个非常奇怪的过程

$service = (urlencode($_REQUEST['service']));
$service = substr($service,0,-6);
$service = $service.'==';

对其进行编码以保留+,但这随后将"="转换为%3d,从而停止了SOAP提要的工作。

删除%3d%3d

读取两个'==='并提交

它有效。。。

转到图..

您需要urlender()it:

$service = urlencode($service);

建立你的url

$url = "http://.....?service=".$service;

接收时:

$service = urldecode($_GET['service']);

您的正则表达式几乎是正确的

出现这种情况是因为+字符在上面的正则表达式中用作表达式/量词,所以必须用反斜杠''对其进行转义

这适用于我的服务器

<?php
$sub = '+blPsNeYyjvRQhCiHQEISg==';
echo preg_replace('/''+/', '%2b', $sub);

输出

%2bblPsNeYyjvRQhCiHQEISg==