nixp.ru v3.0

20 января 2017,
пятница,
00:38:39 MSK

DevOps с компанией «Флант»
propeller написал 21 января 2006 года в 02:28 (1757 просмотров) Ведет себя как мужчина; открыл 53 темы в форуме, оставил 158 комментариев на сайте.

Немного истории.

Вот пользовался я все время этим пресловутым urlencode, когда надо было что русское в приличный вид привести. Потом занадоело мне после каждого get запроса заново кодировать. а уж когда потом появилась необходимость закодировать сразу два раза строку, чтобы она пришла в нужном виде — тут уж мне совсем занадоело.

Открыл php.net, взял радостно base64_encode и начал судорожно перписывать скрипты. радовался, радовался, пока не оказалось, что он использует слэш…

Так вот вам мой вопль — подскажите что-нибудь приличное для кодирования русских строк в PHP.

decvar

base64 вроде не содержит слешей…

propeller

спасибо, ответили.

Содержит.

Если не веришь документации, можешь проверить сам. что-то типа «может» выдает слэш.

decvar

проверил вот этой штукой весь русский алфавит и не получил слеш.

Википедия говорит :

«Base 64 literally means a positional numbering system using a base of 64. It is the largest power of two base that can be represented using only printable ASCII characters.»

propeller

ну значит пробелы он кодирует слешами.

я нашел как раз примером.

vnp

Опаментайтесь, панове. При чем здесь русский алфавит и пробелы?

base64 — не подстановочный код, однако. Он переводит 3 байта исходного текста в 4 байта выходного. Да, слеш используется. А какие, собственно, с этим проблемы?

Вика
propeller
подскажите что-нибудь приличное для кодирования русских строк в PHP.

Сегодня столкнулась с такой же проблемой. Часов 5 убила на то, чтобы понять, почему закодированное base64_encode-ом значение, переданное в урл-е, после base64_decode не всегда эквивалентно первоначальному. Оказалось, что возможные знаки «+» и «/» после урл-преобразования (urlencode, либо и вовсе без него, браузер по-любому приводит строку в ссылке к валидному виду) — декодятся неправильно!

Решений нашлось 2.

1. После использования base64_encode заменять в полученом коде «+» и «/» на что-нибудь безобидное, типа «-» и «_». При декодировании сначала производить обратную замену, а уж потом использовать base64_decode.

2. Второе решение — без всяких замен, но закодированная строка получается гораздо длиннее: вместо base64_encode применять к строке bin2hex, а при декодировании использовать pack(’H*’,$кодированная_строка).

Удачи!

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.