3

$_getからエンコードされたURL変数でURLデコードを使用しています。

私が直面している現在の問題は、次のようにエンコードされたURLがあることです。 blah.php?url=http%3A%2F%2Fm.youtube.com%2F#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=%2Fwatch%3Fv%3Dzd7c5tQCs1I%26feature%3Dplayer_embedded

これがどのようなエンコーディングかわかりませんが、誰か助けてもらえますか?これに「urldecode」だけを使用すると、m.youtube.com

編集:私の問題は、URLデコードが機能しないことではなく、このエンコードされたURLを手動で入力してurldecode()を使用すると機能しますが、このエンコードされたURLが実際のページのURLにあり、_GET関数を使用する場合はデコードすると、URLの「#」の後のすべてが削除されます。

<?php print urldecode($_GET["url"]);?>

戻ります

"http://m.youtube.com/"

それ以外の

"http://m.youtube.com/#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=/watch?v=zd7c5tQCs1I&feature=player_embedded"

問題は、ポンド記号がエンコードされていないことだと思います。ページを更新すると、ポンドの歌とその後のすべてが削除されます。これを回避するにはどうすればよいですか。ポンド記号がある場合でも、「GET」から情報を取得できますか?(#)

4

5 に答える 5

9

問題は、完全なリンクに複数の=記号があり、ブラウザが他の=記号がurl=パラメーターのみを参照していることを判断できないことです。あなたの場合、最初に、リンクがurl=パラメータに与えられる前に関数を使用する必要があります:

========================= 1) JAVASCRIPT ======================
<script type="text/javascript">
    var mylink = encodeURIComponent('http://testest.com/link.php?name=sta&car=saab');
    document.write("http://yoursite.com/url=" + mylink);
</script>


========================= 2)or PHP ===========================
<?php
    $mylink = 'http://testest.com/link.php?name=sta&car=saab';
    echo 'http://yoursite.com/url='.urlencode($mylink);
?>

したがって、出力(urlパラメーター)は次のようになります

http://yoursite.com/url=http%3A%2F%2Ftest.com%2Flink.php%3Fname%3Dsta%

したがって、url パラメータはエンコードされた URL を取得します。その後、.php ファイルはその「url」パラメーターをデコードする必要があります。

<?php
$varr = $_GET['url'];
$varr = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($varr)); 
$varr = html_entity_decode($varr,null,'UTF-8');
echo $varr;
?>

それはあなたに正しい値を与えるでしょう

于 2013-03-26T13:39:07.803 に答える
9

php.net で urldecode 関数について読んだところ、スーパーグローバル $_get は既にデコードされていると書かれています。そして危険な結果。」

于 2013-09-05T09:13:47.687 に答える
0

このエンコーディングは、パーセントエンコーディングまたはURLエンコーディングと呼ばれます。urldecodeを使用してデコードできます。(例: http: //phpfiddle.org/lite/code/0nj-198

于 2012-12-10T18:45:36.673 に答える
0

ASCII 形式にエンコードされます。

http://www.w3schools.com/tags/ref_urlencode.aspを参照してください。

于 2012-12-10T06:41:36.893 に答える
0

ここに問題があります。ポンド記号 (#) (ハッシュ) はエンコードされていませんでした...戻って再エンコードできないため、JavaScript を使用する必要があります (例: alert(window.location.hash) ;) ハッシュの後に完全な URL を送信するには、それを PHP のバージョンの URL に追加します。次に、PHP の検索と置換関数を使用して「#」を「%23」に置き換え、urldecode メソッドを使用します。そして、デコードされた完全な適切な URL を返します。

于 2012-12-10T21:34:46.650 に答える