Кодирование / декодирование URL-адресов PHP

Я использовал решение, принятое для этого вопроса, для шифрования по 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 

    ничего плохого в этом.