Я использовал решение, принятое для этого вопроса, для шифрования по id, например, в /index.php?id=3 . Проблема в том, что я не могу отправить зашифрованное значение в качестве URL-адреса, например /index.php?id=dsf13f3343f23/23= . Потому что иногда у него будут странные символы в URL-адресе, например, обратите внимание на знак =
в конце
Странные символы в значениях, переданных в URL-адресе, должны быть экранированы, используя urlencode(
).
Например, следующая часть кода:
echo urlencode('dsf13f3343f23/23=');
даст вам:
dsf13f3343f23%2F23%3D
Что отлично работает, как параметр URL.
И если вы хотите создать цепочку aquery с несколькими параметрами, посмотрите на http_build_query()
.
Например :
echo http_build_query(array( 'id' => 'dsf13f3343f23/23=', 'a' => 'plop', 'b' => '$^@test', ));
дам тебе :
id=dsf13f3343f23%2F23%3D&a=plop&b=%24%5E%40test
Эта функция относится к экранированию и конкатенации самих параметров 😉
Используйте функцию urlencode()
PHP для кодирования значения, прежде чем помещать его в URL-адрес.
string
urlencode
( string
$str
)
Эта функция удобна при кодировании строки, которая будет использоваться в части запроса URL-адреса, в качестве удобного способа передачи переменных на следующую страницу.
Эта функция преобразует «странные» символы, такие как =
, в формат, безопасный для размещения в URL-адресе. Вы можете использовать его следующим образом:
Header('Location: /index.php?id=' . urlencode($id))
Если вы используете Base64 для кодирования двоичного значения для URL-адреса, есть также вариант с безопасным алфавитом с URL-адресом и файлом .
Вы можете использовать функцию strtr
для перевода одного из алфавита в другое:
$base64url = strtr($base64, '+/', '-_'); $base64 = strtr($base64url, '-_', '+/');
Таким образом, вы можете использовать эти функции для кодирования и декодирования base64url :
function base64url_encode($str) { return strtr(base64_encode($str), '+/', '-_')); } function base64url_decode($base64url) { return base64_decode(strtr($base64url, '-_', '+/')); }
См. Также мой ответ о том, что является хорошим способом создания короткой буквенно-цифровой строки из длинного хеша md5?
Нет смысла использовать параметры шифрования.
Отправьте его как есть:
/index.php?id=3
ничего плохого в этом.