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