在 URL 变量中保留“+”符号

Preserve a '+' symbol in a URL variable

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

例如。

+blPsNeYyjvRQhCiHQEISg==

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

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

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

所以总而言之,我需要将 + 的所有实例替换为 %2b

我试过了

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

但这也失败了,只是 returns NULL

答案:

为了简单说明流程,但为了让 Feed 正常工作,我不得不使用一个非常奇怪的流程

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

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

$service = $service.'==';

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

删除 %3d%3d

读取两个'=='并提交

而且有效...

算了吧..

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

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

这适用于我的服务器

<?php

$sub = '+blPsNeYyjvRQhCiHQEISg==';

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

正在输出

%2bblPsNeYyjvRQhCiHQEISg==

你需要 urlencode() 它:

$service = urlencode($service);

建立你的url

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

收到时:

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