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