2

画像ホスト用の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をエスケープ解除するにはどうすればよいですか?この問題を処理するためのより良い方法はありますか?

4

2 に答える 2

6

encodeURIComponent代わりに使用することをお勧めしますescape

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

次に、urldecodePHP内で使用して、必要な結果を得ることができます。

vs. vs.の説明については、この質問を参照してください。escapeencodeURIencodeURIComponent

于 2013-01-16T17:54:55.487 に答える
2

Javascriptで送信する場合:

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

PHPコードの場合

$url = urldecode($_GET["my_url"])
于 2013-01-16T18:31:42.673 に答える