【问题标题】:base64_decode showing corrupted charactersbase64_decode 显示损坏的字符
【发布时间】:2021-03-04 20:04:23
【问题描述】:

我正在构建一个包含 base64 编码参数集的超链接,如下所示:

$params = base64_encode("member_id={$recipient_id}&api_key=".SECRET_KEY);
$link   = HOST_ADDRESS."test.php?k=" . $params;

链接执行时,运行如下代码:

// get the encoded string from the link parameter 
$link_parm = $_GET['k'];
$link = substr($link_parm, 0);

// url encode the string to ensure all special characters convert properly - attempt to stop errors
urlencode($link);

// decode the rest of the link 
$decoded_link = base64_decode($link);

// get the remaining data elements from the link parameter 
$msg_data = preg_split( "/[&=]/", $decoded_link);

有时,$msg 数据已损坏,如下所示:

member_id=167œÈ&api_key=secretkey

如您所见,会员 ID 已损坏。

有人可以帮我了解导致这种情况的原因吗?

谢谢。

【问题讨论】:

  • 当显示“损坏”的输出时,var_dump($recipient_id); 会显示什么?

标签: php character-encoding urlencode base64url


【解决方案1】:

对于初学者,除了您描述的问题之外,还有一些问题。

  1. 你想用$link = substr($link_parm, 0);做什么?这可以写成$link = $link_parm;。或者,您当然可以只使用$link = $_GET['k'];,甚至只使用$_GET['k']
  2. urlencode($link); 什么都不做,因为你没有看到它的结果。参数不是通过引用传递的。
  3. 您的“尝试停止错误”可能应该以不同的方式处理。例如,当您收到意外输入时抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2010-12-14
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多