- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте!
Просьба помочь с кодированием ссылок, содержащих русские буквы.
Пример:
http://programma-biserok.ru/СКРИНШОТЫ/Схема целиком.png
Если ввести ее в браузер и скопировать оттуда, получим:
http://programma-biserok.ru/%D0%A1%D0%9A%D0%A0%D0%98%D0%9D%D0%A8%D0%9E%D0%A2%D0%AB/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0%20%D1%86%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%BC.png
Т.е. закодированы будут только русские буквы.
А кстати домены браузер вообще кодирует совсем по-другому...
Такая ссылка вполне валидна для моего скрипта, который сохраняет копии скриншотов на сервер, в отличие от незакодированной...
Если использовать код на PHP, как советуют во всех мануалах:
то получаем ссылку:
_http%3A%2F%2Fprogramma-biserok.ru%2F%D0%A1%D0%9A%D0%A0%D0%98%D0%9D%D0%A8%D0%9E%D0%A2%D0%AB%2F%D0%A1%D1%85%D0%B5%D0%BC%D0%B0+%D1%86%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%BC.png
Такая ссылка не является валидной для скрипта сохранения из-за того, что в ней также закодированы все http, слеши, двоеточия и т.п., а не только русские буквы.
Так как же кодировать только русские буквы в URL, чтобы скрипт сохранения файлов на сервер мог работать с такими URL?
Пока приходится копировать ссылки в браузер и потом закодированные отдавать в скрипт вручную, так он работает отлично.
А если с помощью регулярки или parse_url разбить урл на сегменты, провести их через urlencode а потом сложить? Получите то же самое что и скопировав урл из окна браузера. Т.е. суть в том чтоб не шифровать служебные символы и домен
да, вариант, думал проще есть решение.
А домен нужно кодировать еще как-то по другому?
Ведь браузер выдает русские домены виде xn--...
Да, домен надо кодировать в punycode. Для этого нет стандартных функций и надо или юзать самописные - http://artkiev.com/blog/php-punycode-convert.htm или пакет Net_IDNA2 http://pear.php.net/package/Net_IDNA2/
Придется значит целую функцию городить, которая будет кодировать русские буквы в Url через urlencode, а домен через punycode. Не ожидал, что все так сложно :(
Ну тут не настолько все сложно, зато раз сделал и забыл :)
Согласен, все решаемо конечно, просто думал, что парой строк обойдусь, а не функцией + классом..
А что, нельзя как-то вывернуться?
$s='http://programma-biserok.ru/СКРИНШОТЫ/Схема целиком.png';
$s=iconv("Windows-1251","UTF-8", $s);//сайт в кодировке win-1251
$s=strstr(''http://programma-biserok.ru/', '');
print 'http://programma-biserok.ru/'.urlencode($s).BR;
Потом посмотреть на что меняется слеш и перед выводом заменить обратно через тот же strstr.
Можно вообще менять слеш до кодирования на что-то еще, а потом обратно
DiKiJ, это если у него один домен,а если несколько? В принципе да, если все будет работать на одном домене, то все гораздо проще. Слеш после шифрации это %2F
Согласен, все решаемо конечно, просто думал, что парой строк обойдусь, а не функцией + классом..
Там и будет пара строк:
Более интересный вопрос - а где вы берёте эти url с русскими буквами? По RFC их не должно быть в url, те у вас что-то неправильно.А вы ещё и перекодируете их с cp1251 в utf8, тогда как "русские" url должны быть сразу в utf8, иначе браузер не покажет их русскими буквами.
PS: Для IDN-доменов придётся заюзать функцию по-сложнее, но, опять, же, если брать доменное имя в "правильном месте" - оно должно быть сразу в пуникоде. Русскими буквами браузер только ОТОБРАЖАЕТ пуникод в адресной строке, а на самом деле там содержится xn-абракадабра.
Есть ещё лазейка:
вместо
Браузеры создают зависимость от кодировки страницы, на которой оставили такую ссылку
httpsss://ru.wikipedia.org/wiki/Кондиционер