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

时间:2015-03-19 11:14:37

标签: php urlencode

我正在使用SOAP Feed,需要传递一些特殊变量(从另一个Feed中提取)

例如。

+blPsNeYyjvRQhCiHQEISg==

变量必须完全按照原样发布,但是当我在PHP脚本中呈现它时...它将+符号视为+动作并剥离它并且试图进行计算

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

如果我将+替换为%2b它可行,那么我尝试了网址编码,但仍然失败。这是因为最后的==必须保持为==

总而言之,我需要将+替换为%2b

的所有实例

我试过了

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

但这也失败了,只返回NULL

答案:

简单地说明这个过程但是为了让饲料正常工作我不得不使用一个非常奇怪的过程

$service = (urlencode($_REQUEST['service']));

$service = substr($service,0,-6);

$service = $service.'==';

对其进行编码以保留+但这会将'='转换为%3d,从而停止SOAP Feed的工作。

删除%3d%3d

读了两个'=='并提交

它有效......

去图..

2 个答案:

答案 0 :(得分:2)

你需要urlencode()它:

$service = urlencode($service);

建立您的网址

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

并在收到时:

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

答案 1 :(得分:1)

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

这是因为+字符在上面的正则表达式中用作表达式/量词,所以你必须用反斜杠\

来转义它

这适用于我的服务器

<?php

$sub = '+blPsNeYyjvRQhCiHQEISg==';

echo preg_replace('/\\+/', '%2b', $sub);

输出

%2bblPsNeYyjvRQhCiHQEISg==