在 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']);
我目前正在使用 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']);