php URL 解码得到 '+'来自网址
所以我试图对一个 url 进行编码/解码,解码时将返回该 url 中编码的 +
符号。例如,我对 website.com/index.php?eq=1+12
进行编码,编码后将 +
转换为 %2B
,如下它应该。当我从 $_REQUEST['eq']
检索值并使用 urldecode()
时,它回显为 "1 12"
。可以这么说,我似乎无法解码以带回 +
。我在这里做错了什么,还是有更有效/更好的方法来做到这一点?这是我使用的确切编码/解码行。
提交页面
<?php
$eq = "1+12";
$send = '<a href="website.com/index.php?eq='.urlencode($eq).'</a>';
echo $send;
检索页面
<?php
$eq = urldecode($_REQUEST['eq']);
echo $eq;
?>
So I am trying to encode/decode a url that when decoded will return the encoded +
symbols from teh url. For example, I encodewebsite.com/index.php?eq=1+12
which when encoded turns the +
into %2B
, as it should. When I retrieve the value from $_REQUEST['eq']
and use urldecode()
it echo's as "1 12"
. I cannot seem to get the decode to bring back the +
so to speak. Am I doing something wrong here, or is there a more efficient/better way to go about doing this? Here is the exact encode/decode lines I use.
Submit Page
<?php
$eq = "1+12";
$send = '<a href="website.com/index.php?eq='.urlencode($eq).'</a>';
echo $send;
Retrieval page
<?php
$eq = urldecode($_REQUEST['eq']);
echo $eq;
?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不要运行
urldecode
,$_REQUEST
中的数据会自动为您解码。URL 中的加号是一个编码空格。 PHP 自动将十六进制值解码为
+
。然后,通过urldecode
运行结果,您手动(错误地)将+
解码为。
Don't run
urldecode
, the data in$_REQUEST
is automatically decoded for you.A plus sign, in a URL, is an encoded space. PHP decodes the hex value to a
+
automatically. Then, by running the result throughurldecode
, you are manually (and incorrectly) decoding the+
to a.
尝试使用函数
rawurldecode()
而不是urldecode()
Try using the function
rawurldecode()
instead ofurldecode()
我使用
encodeURIComponent()
在 JavaScript 中对其进行编码,并使用rawurldecode()
在 PHP 中对其进行解码,它可以正确地为我编码/解码,包括“+”,但是 不与urldecode()
I encode it in JavaScript with
encodeURIComponent()
and decode it in PHP withrawurldecode()
and it encodes/decodes properly for me, including the "+", but NOT withurldecode()