【问题标题】:Form data base64 encoded with get method用get方法编码的表单数据库base64
【发布时间】:2016-07-12 09:20:58
【问题描述】:

我需要能够提供来自 html 表单的自定义 URL 以及以 base64 编码的数据。

例如:

<form name="test" action="test.php" method="get">
 <input type="text" name="category" />
 <input type="text" name="gender" />
 <input type="text" name="quantity" />
</form>

并获得一个 URL:

test.php?Y2F0ZWdvcnk9c3BvcnRzJmdlbmRlcj1mZW1hbGUmcXVhbnRpdHk9NTA=

谢谢。

【问题讨论】:

  • 函数调用base64_encode()... :-?
  • 我知道@ÁlvaroGonzález,但是如何将表单的所有值编码为一个字符串,而不是单独的值?

标签: php html encoding base64


【解决方案1】:

如果我们假设Y2F0ZWdvcnk9c3BvcnRzJmdlbmRlcj1mZW1hbGUmcXVhbnRpdHk9NTA= 是预期的输出,我们将首先对其进行解码以查看它的样子:

category=sports&gender=female&quantity=50

这正是您的 GET 表单的查询字符串,因此我们可以直接从 $_SERVER['QUERY_STRING'] 获取值。

编码的内置函数是base64_encode(),我们也可以用built-in operator 连接字符串。最后同样重要的是,我们可以使用另一个名为 rawurlencode() 的内置函数对 URL 组件进行编码。所以我们有所有的砖块:

$url = 'test.php?' . rawurlencode(base64_encode($_SERVER['QUERY_STRING']));

【讨论】:

  • @ManelMusti 你到底是什么意思?我的回答有什么问题吗?
  • 完全没有,你的回答是对的,而且很有帮助,谢谢。
【解决方案2】:

您可能应该先发布表单,然后执行以下操作:

// Sanitize data

$urlData = $array();

$urlData['category'] = $_POST['category'];
$urlData['gender']   = $_POST['gender'];
$urlData['quantity'] = $_POST['quantity'];

$urlData = base64_encode( json_encode( $urlData ) );

header("Location test.php?data=". $urlData ."");
exit();   

我使用 json_encode 是因为仅 base64 就可以改变数据的含义。 查看有关该主题的这篇文章:Passing base64 encoded strings in URL

然后在test.php上:

$data = json_decode( base64_decode( $_GET['data'] ) );
// Sanitize data again

【讨论】:

  • 给定method="get"$_POST['...'] 只会触发未定义的索引通知。而json_encode() 不会生成预期的输出格式。
【解决方案3】:

您不需要使用另一个数组 只需简单地使用此代码

$codedData = base64_encode(json_encode($_POST));
$decodedData = json_decode(base64_decode($orderEncode) , true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多