md5 не кодирует, а хеширует.
используй. о результатах - напиши.
Результаты превзошли все мои ожидания! Вы не понимаете тонкого юмора.
Фанат, где ты? Смотри - не я один такой дубовый
Если серьезно, то я ответил на вопрос
NeoLynx в третьем сообщении сверху.
А теперь о том, почему не рекомендуется использовать
base64_encode() для передачи данных методом GET (это же относится и к методу POST). Почитайте вот это:
http://www.faqs.org/rfcs/rfc2045, раздел 6.8. Обратите особое внимание на символ под номером 62. А теперь попробуйте передать данные скирпту
test.php таким образом:
PHP:
$enc_data = base64_encode('<b>');
print($enc_data);
$new_url = 'test.php?data=' . $enc_data;
В скрипте
test.php выведите на печать параметр
data перед его декодированием и сравните с тем, что вывел первый скрипт.
Да, после декодирования вы получите ту же строку
<b>. Но, прочитайте вот этот параграф из вышеупомянутого RFC:
Any characters outside of the base64 alphabet are to be ignored in base64-encoded data.
и подумайте: "соответствует ли функция
base64_decode() этому RFC?". Вдруг мне захочется использовать в качестве разделителя закодированных блоков не символ перевода строки, а символ пробела. В этом случае функция
base64_decode() не справится со своими обязанностями.
А если принимающее закодированные данные приложение использует функцию декодирования, полностью соответствующую стандарту RFC (как, например, функция
decode_base64() из пакета
MIME::Base64 в перле)?
Согласен, что данные, закодированные
base64_encode(), обычно имеют меньшую длину, чем данные, закодированные
urlencode(). Поэтому лучшее решение - использовать их вместе:
PHP:
$new_url = 'http://microsoft.com/application?data=' . urlencode(base64_encode($data));
-~{}~ 14.04.04 21:53:
md5 не кодирует, а хеширует.
Falc, сейчас посмотрим, что кодирует, а что хэширует
используй. о результатах - напиши.
IntenT, а вот и долгожданные результаты. Используем функцию
md5() для кодирования данных, чтобы их можно было передать в качестве параметра в GET или POST запросе:
PHP:
function md5_encode($str) {
static $a = NULL; // таблица для кодирования
if (is_null($a)) {
// создаем таблицу для кодирования
$a = array();
$i = 0;
while ($i < 256) {
$index = substr(md5($i * pi()), 28, 3);
$a[chr($i)] = $index;
$i++;
}
}
// кодируем строку
$out = '';
$n = strlen($str);
for ($i = 0; $i < $n; $i++) $out .= $a[$str{$i}];
return $out;
}
function md5_decode($str) {
static $a = NULL; // таблица для декодирования
if (is_null($a)) {
// создаем таблицу для декодирования
$a = array();
$i = 0;
while ($i < 256) {
$index = substr(md5($i * pi()), 28, 3);
$a[$index] = chr($i);
$i++;
}
}
// декодируем строку
$out = '';
$n = strlen($str);
$n = (int) ($n / 3);
for ($i = 0; $i < $n; $i++) {
$code = substr($str, 3 * $i, 3);
if (isset($a[$code])) $out .= $a[$code];
else continue;
}
return $out;
}
Еще есть вопросы?