base64_decode, показывающий поврежденные символы

#php #character-encoding #urlencode #base64url

#php #кодировка символов #urlencode #base64url

Вопрос:

Я создаю гиперссылку, которая включает набор параметров в кодировке base64, как показано ниже:

 $params = base64_encode("member_id={$recipient_id}amp;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( "/[amp;=]/", $decoded_link);
  

Иногда данные $ msg повреждены и выглядят следующим образом:

 member_id=167œÈamp;api_key=secretkey
  

Как вы можете видеть, идентификатор участника поврежден.

Может кто-нибудь, пожалуйста, помогите мне понять, что может быть причиной этого?

Спасибо.

Комментарии:

1. Что var_dump($recipient_id); показывает вам, когда отображается «поврежденный» вывод?

Ответ №1:

Для начала, есть несколько проблем, связанных с этим, помимо проблемы, которую вы описываете.

  1. Что вы пытаетесь сделать, используя $link = substr($link_parm, 0); ? Это может быть просто записано как $link = $link_parm; . Или, конечно, вы могли бы просто сделать $link = $_GET['k']; или даже просто использовать $_GET['k'] .
  2. urlencode($link); ничего не делает, поскольку вы не улавливаете его результат. Аргумент не передается по ссылке.
  3. Ваша «попытка остановить ошибки», вероятно, должна обрабатываться по-другому. Например, путем выдачи ошибки при получении неожиданного ввода.