#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:
Для начала, есть несколько проблем, связанных с этим, помимо проблемы, которую вы описываете.
- Что вы пытаетесь сделать, используя
$link = substr($link_parm, 0);
? Это может быть просто записано как$link = $link_parm;
. Или, конечно, вы могли бы просто сделать$link = $_GET['k'];
или даже просто использовать$_GET['k']
. urlencode($link);
ничего не делает, поскольку вы не улавливаете его результат. Аргумент не передается по ссылке.- Ваша «попытка остановить ошибки», вероятно, должна обрабатываться по-другому. Например, путем выдачи ошибки при получении неожиданного ввода.