画像ホスト用のGoogleChrome拡張機能があり、ウェブサイトにURLを送信します。そのURLは、Javascriptのメソッドを介してエンコードされます。escape
によってエンコードされたURLescape
は次のようになります。
http%253A//4.bp.blogspot.com/-xa4Krfq2V6g/UF2K5XYv3kI/AAAAAAAAAJg/8wrqZQP9ru8/s1600/LuffyTimeSkip.png
どういうわけかPHP経由でURLを通常に戻す必要があるので、それをチェックすることができ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
。
この状況に対処するための最良の方法は何でしょうか?
実際の質問: PHPでエスケープされたURLをエスケープ解除するにはどうすればよいですか?この問題を処理するためのより良い方法はありますか?