Intereting Posts
Формулы для вычисления геопространственности получить доступ к модели из представления в codeigniter? Постоянный локальный доменный сокет в php Производительность: если else vs switch, а vs for, для каждого vs for, print vs printf извлекать данные из db и отображать их в таблице в php .. см. этот код, что с ним не так? php – printf и sprintf имеют разные выходы Codeigniter: вложение электронной почты последних сообщений электронной почты не очищается при отправке нескольких писем в цикле PHP MySQL удаляет строку Проблемы с тайм-аутом Auth с CakePHP Максимальное количество запросов SQL на страницу Вызвать javascript-код после нажатия кнопки, а затем обновить страницу файловая структура silex для пользовательских поставщиков услуг Анализ XML в PHP по определенному атрибуту PHP-классы с пространством имен не могут быть загружены через spl_autoload_register? Что такое хороший брокер сообщений, который работает с PHP?

Javascript «unescape» в PHP

У меня есть расширение Google Chrome для моего хоста изображений, и он отправляет URL-адрес на мой сайт. Этот URL-адрес кодируется с помощью метода escape кода Javascript.

URL-адрес, закодированный с помощью escape выглядит следующим образом:

 http%253A//4.bp.blogspot.com/-xa4Krfq2V6g/UF2K5XYv3kI/AAAAAAAAAJg/8wrqZQP9ru8/s1600/LuffyTimeSkip.png 

Мне нужно как-то вернуть URL-адрес через PHP, поэтому я могу проверить его на filter_var($the_url, FILTER_VALIDATE_URL) и он явно терпит неудачу, если URL-адрес подобен выше.

Вот как выглядит Javascript:

 function upload(img) { var baseurl="http://imgit.org/remote?sent-urls=1&remote-urls=" + escape(img.srcUrl); uploadImage(baseurl); } function uploadImage(imgurl) { chrome.tabs.create({ url: imgurl, selected: true }); } var title = "Upload this image to IMGit"; var id = chrome.contextMenus.create({"title": title, "contexts": ['image'], "onclick": upload}); 

И это то, что я делаю в PHP:

 if (!filter_var($file, FILTER_VALIDATE_URL) || !filter_var(urldecode($file), FILTER_VALIDATE_URL)) { throw_error('The entered URLs do not have a valid URL format.', 'index.php#remote'); break; } 

Честно говоря, urldecode() не выполняет эту работу для меня. И, как вы можете заметить, я получаю URL-адрес через $_GET .

Каким будет лучший способ справиться с этой ситуацией?

Актуальный вопрос: как я могу отменить экранированный URL-адрес в PHP? Есть ли лучший способ справиться с этой проблемой?

Вы захотите использовать encodeURIComponent вместо escape :

 function upload(img) { var baseurl="http://imgit.org/remote?sent-urls=1&remote-urls=" + encodeURIComponent(img.srcUrl); uploadImage(baseurl); } 

Затем вы можете использовать urldecode внутри PHP, чтобы получить urldecode результат.

См. Этот вопрос для объяснения escape vs. encodeURI и encodeURIComponent .

Для отправки в Javascript:

 var baseurl="http://imgit.org/remote?sent-urls=1&remote-urls=" + encodeURIComponent(img.srcUrl); 

В PHP-коде

 $url = urldecode($_GET["my_url"])