1

我正在构建一个包含 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 已损坏。

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

谢谢。

4

1 回答 1

0

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

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