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

Php 保留一个'+';URL变量中的符号,php,urlencode,Php,Urlencode,目前我正在使用一个SOAP提要,它需要传递一些特殊变量(从另一个提要中提取) 例如 完全按照原样发布变量是绝对重要的,但是当我在PHP脚本中呈现它时。。它将+符号视为+操作,并将其剥离并尝试执行计算 因此,如果我有blPsNeYyj+vRQhCiHQEISg==字符串将被发布为blPsNeYyj+vRQhCiHQEISg,并导致错误 如果我用%2b替换+,它会工作,所以我尝试了URL编码,但仍然失败。这是因为末尾的=必须保持为= 总之,我需要用%2b替换+的所有实例 我试过了 $service

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

例如

完全按照原样发布变量是绝对重要的,但是当我在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

读取两个“==”并提交

而且它是有效的


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

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

这在我的服务器上工作

<?php

$sub = '+blPsNeYyjvRQhCiHQEISg==';

echo preg_replace('/\\+/', '%2b', $sub);
您需要urlencode()将其:

建立你的网址

$url = "http://.....?service=".$service;
收到时:

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

尝试
preg\u replace('/\+/',…)。加号是正则表达式中的量词。我已经修改了我的帖子,试试('/\\+/');单引号和双引号之间有区别。如果你使用双引号,你也必须转义反斜杠:
“/\\+/”
“/\+/”
。OP编辑了这篇文章,现在它显示了一个转义的模式我已经修改了我的文章-我已经测试了上面的内容,你也可以在这里测试模式/\+/,替换x,主题y…你可以在正则表达式中使用一个反斜杠,正如在
'/\+/'
中一样,请参阅。感谢您提供的提示,但无论出于何种原因,这仍然忽略了“+”,尽管这无疑是由于愚蠢的提要及其工作原理。修复添加到我的OPI使用了这一部分来获得答案
$service = urlencode($service);
$url = "http://.....?service=".$service;
$service = urldecode($_GET['service']);