У меня есть расширение 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"])