我目前正在处理一个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==