PHP URL кодирование / декодирование - PullRequest
8 голосов
/ 14 апреля 2011

Я использовал решение, принятое для этого вопроса , для шифрования по id, например, в / index.php? Id = 3 .Проблема в том, что я не могу отправить зашифрованное значение в виде URL-адреса, например / index.php? Id = dsf13f3343f23 / 23 = .Потому что иногда в URL появляются странные символы, например, обратите внимание на знак = в конце

Ответы [ 4 ]

21 голосов
/ 14 апреля 2011

странные символы в значениях, переданных в URL, следует экранировать, используя urlencode().


Например, следующая часть кода:

echo urlencode('dsf13f3343f23/23=');

даст вам:

dsf13f3343f23%2F23%3D

Что отлично работает, как параметр URL.


И если вы хотите построить водную строку с несколькими параметрами, взгляните на функцию 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

Эта функция имеет дело с экранированием и конкатенацией самих параметров; -)

4 голосов
/ 14 апреля 2011

Если вы используете 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?

4 голосов
/ 14 апреля 2011

Используйте функцию PHP urlencode() для кодирования значения перед тем, как поместить его в URL.

string urlencode ( string $str )
Эта функция удобна, когда кодирование строки для использования в запросить часть URL, как удобно способ передачи переменных к следующему стр.

Эта функция преобразует «странные» символы, такие как =, в формат, безопасный для вставки в URL. Вы можете использовать это так:

Header('Location: /index.php?id=' . urlencode($id))
1 голос
/ 14 апреля 2011

Нет смысла в шифровании параметров.
Отправить как есть:

/index.php?id=3 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...