【问题标题】:Stop PHP from decoding my url parameter阻止 PHP 解码我的 url 参数
【发布时间】:2013-01-14 13:41:29
【问题描述】:

我通过 URL(键、值)发送逗号分隔的值。我用 Javascript 的 escape() 对它们进行编码,然后用 %2c 替换每个值中的逗号。问题是在 PHP 结束时,编码的逗号变成了 "," 在发生 explode() 之前,然后我的包含逗号的字符串被分解并且它不能正确保存。

如何阻止 PHP 将我的编码位转换回未编码位?

我的每个输入的 JS 是:

fieldData += $(this).attr("id")+","+escape($(this).html()).replace(/,/g,"%2c")+",";

我的 PHP 是:

$fieldData = explode(",", $_POST['fieldData']);

尝试过(连同其他东西):

$fieldData = explode(",", urlencode($_POST['fieldData']));

【问题讨论】:

  • 请发布未修改的$_POST['fieldData'] 的样子。
  • url(EN)code 应该是您的第一个提示。您将逗号转换回%2c,这不是您要爆炸的内容...
  • @Sammitch 它看起来像这样 "data=name,sammitch,age,20,bio,helpful%20guy%20,on%20stackoverflow" 问题是最后一位逗号^

标签: php javascript url-rewriting urlencode url-parameters


【解决方案1】:

我建议为此使用 base64encode/decode。

javascript 看起来像这样:http://jsfiddle.net/Y6yuN/

<script src='http://javascriptbase64.googlecode.com/svn/trunk/base64.js'></script>
fieldData += $(this).attr("id")+","+escape(Base64.encode($(this).html()))+",";

转义用于尾随 =

所以你最终会得到逗号分隔的 base64 编码字符串。

在 PHP 方面:

$fieldData = explode(",", $_POST['fieldData']);
foreach ($fieldData as $k => $v){
  $fieldData[$k] = base64_decode(urldecode($v));
}

【讨论】:

  • 我已经解决了这个问题。但问题仍然存在,最长的值,即带逗号的值,现在在解码后返回空!我这样做了: foreach ($fieldData as $k => $v){ echo $fieldData[$k]; $fieldData[$k] = base64_decode(urldecode($v));回声 $fieldData[$k]; } 第二次出来空白!我相信这与最后的 = 有关。 urldecode 似乎没有将其转换回来,因此 base64_decode 只是返回 false。
  • 最后我不得不在JS编码之前转义:Base64.encode(escape($(this).html())) 谢谢你的帮助!
【解决方案2】:

您的帖子没有很好地解释,但我认为您想解码JS传递的数据。所以,代码应该是:

$fieldData = explode(",", urldecode($_POST['fieldData']));

如果我错了,试着写得更好!

【讨论】:

  • 这个过程不是问题。抱歉,如果没有很好地解释 - 显然标题是自动更正的。如果你能看到他的答案,Matthew Scragg 的想法是正确的
  • 实际上显然其他人编辑了我的标题,这可能没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多