propeller
написал 21 января 2006 года в 02:28 (3226 просмотров)
Ведет себя
как мужчина; открыл 53 темы в форуме, оставил 158 комментариев на сайте.
Немного истории.
Вот пользовался я все время этим пресловутым urlencode, когда надо было что русское в приличный вид привести. Потом занадоело мне после каждого get запроса заново кодировать. а уж когда потом появилась необходимость закодировать сразу два раза строку, чтобы она пришла в нужном виде — тут уж мне совсем занадоело.
Открыл php.net, взял радостно base64_encode и начал судорожно перписывать скрипты. радовался, радовался, пока не оказалось, что он использует слэш…
Так вот вам мой вопль — подскажите что-нибудь приличное для кодирования русских строк в PHP.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
base64 вроде не содержит слешей…
спасибо, ответили.
Содержит.
Если не веришь документации, можешь проверить сам. что-то типа «может» выдает слэш.
проверил вот этой штукой весь русский алфавит и не получил слеш.
Википедия говорит :
«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.»
ну значит пробелы он кодирует слешами.
я нашел как раз примером.
Опаментайтесь, панове. При чем здесь русский алфавит и пробелы?
base64 — не подстановочный код, однако. Он переводит 3 байта исходного текста в 4 байта выходного. Да, слеш используется. А какие, собственно, с этим проблемы?
Сегодня столкнулась с такой же проблемой. Часов 5 убила на то, чтобы понять, почему закодированное base64_encode-ом значение, переданное в урл-е, после base64_decode не всегда эквивалентно первоначальному. Оказалось, что возможные знаки «+» и «/» после урл-преобразования (urlencode, либо и вовсе без него, браузер по-любому приводит строку в ссылке к валидному виду) — декодятся неправильно!
Решений нашлось 2.
1. После использования base64_encode заменять в полученом коде «+» и «/» на что-нибудь безобидное, типа «-» и «_». При декодировании сначала производить обратную замену, а уж потом использовать base64_decode.
2. Второе решение — без всяких замен, но закодированная строка получается гораздо длиннее: вместо base64_encode применять к строке bin2hex, а при декодировании использовать pack(’H*’,$кодированная_строка).
Удачи!