HTTPSのときエンコードされる「:」

このQ&Aのポイント
  • HTTPSのアドレスで「:」がエンコードされる理由
  • URLエンコードによる「:」の変換
  • 「:」が「%253A」とエンコードされる理由
回答を見る
  • ベストアンサー

HTTPSのとき":"が"%3A"ではなく"%253A"とエンコードされるのは?

URLエンコードについて教えていただきたいことがあります。 <a href=http://hoge.com/hoge?http%3A%2F%2Fhuga.com>hoge</a> というリンクは、当然 http://hoge.com/hoge?http%3A%2F%2Fhuga.com というURLに対して張られますよね? しかし、プロトコルがHTTPSの場合、 https://hoge.com/hoge?http%253A%252F%252Fhuga.com というように、":"や"/"のエンコードされた値に"25"が付加されたURLにリンクが張られてしまうようなのです。 これはなぜなのでしょうか? ご存じの方、教えていただけると幸いです。

noname#70912
noname#70912
  • HTML
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

%25 は % と言う文字のURLエンコード表現です。 どこで再変換しているのかまでは解らないけど、2重にURLエンコードされているようです。 そのリンク用文字列は、cgiなどからのページ出力時にそうなっていると言うことでしょうか? であれば、cgiの問題でしょうし、 静的ページ(html)のリンク用文字列にも変換が掛かるのはちょっと考えられないけど。 また、ブラウザのurl欄に直接入力しても、変換されてしまうということではないですよね。 もし、そうならサーバーの設定あたりを見直してみては?

noname#70912
質問者

お礼

解決しました。どうもありがとうございます! 実は、これはmixiで起こっている現象です。 mixiにHTTPSを使ってアクセスした場合、HTTPの方にリダイレクトされるのですが、そのときに再度URLエンコードが行われるようになっていのが原因だったようです。 HTTPSやHTTP自体には何も問題はありませんでした。 どうもありがとうございました!

関連するQ&A

  • <a href>タグ内のURL抽出

    正規表現初心者です。ご教授よろしくお願いします。 <a href=http://hoge.com/hoge>hoge</a> <a href=http://hoge.com/hoge>hoge<br>hoge</a> 以上の<a href>リンクから、それぞれURLだけを抽出したいのですが うまくできません。 ereg("<a href=(.+)>(.+)</a>",$hoge,$a); echo $a[1]; で、1つ目はURL抽出できたのですが 2つ目のように<br>があると『 http://hoge.com>hoge 』と表示されてしまいます。 このような場合、どのようにして抽出すればよいのでしょうか??

    • ベストアンサー
    • PHP
  • preg_replace内+URLエンコード

    現在、 $hogehoge=preg_replace( "/([^,\(\)]+)/" , '<a href="./hoge.php?hoge=\1">\1</a>', $hoge); このように変数をそのままリンク処理しております。 現在はこの変数に1バイト文字のみしか入っていないのですが、今後2バイト文字も取り扱おうつもりですので、urlencode関数を使いURLエンコードを組み込みたく思います。 このままのカタチで組み込むことは可能でしょうか?

    • 締切済み
    • PHP
  • PHPでaタグ内のリンクの末尾に文字列を追加したい

    PHPでaタグ内のリンクの末尾に文字列を追加したいのですがやり方がわかず困っております。 やりたいことは以下のようなことです <a class="url" href="http://www.abc.com">○○</> や <a href="http://www.abc.com">○○</> となっているhrefのリンクの末尾に"AAA"などの文字列を付加したいです <a class="url" href="http://www.abc.com/AAA">○○</> や <a href="http://www.abc.com/AAA">○○</> ご存じの方がいらっしゃいましたらご教授ください。 よろしくお願いします

    • 締切済み
    • PHP
  • ブラウザ依存?<a name="#xxx" id="#xxx"></a>へ飛ばない

    ブラウザ依存でしょうか?・・・ <li class="yyy"><a href="hoge.html#xxx">ホゲ</a></li> と記述しているリンクをクリックして、URLは http://hogehoge.com/hoge.html#xxx へ移動するのですが、 hoge.html内に <a name="#xxx" id="#xxx"></a> と記述している指定箇所に飛んでくれません。 IE7は正常に飛んでくれますが、 Firefox, Safari, Opera, GoogleChromeなど、 IE7以外のブラウザを用いると飛んでくれないのです。 この機能はIEだけの機能だったでしょうか? ご存知の方がいましたら、ご教授いただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • wiki文法のようにリンク生成

    正規表現について分からない点があり、質問させて頂きます。 いま、 [[link(http://hoge.com?id=123):リンク456]] のように入力された部分を、 <a href="http://hoge.com?id=123">リンク456</a> のように書き換える関数(CreLink())を作っています。 これ自体は作成することができ、機能したのですが、 本文中に記述されたURLをリンクに置き換える関数(EditURL())と競合してしまい、 結果的に正しく機能しないという状況が起きています。 function EditURL($string) { $new_str = mb_ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\0\" rel=\"external\">\\0</a>", $string); return $new_str; } 具体的には、CreLink() で生成した href="http://hoge.com?id=123" の部分でも EditURL() が実行されてしまい、 <a href="<a href="http://hoge.com?id=123" rel="external">http://hoge.com?id=123"</a>>リンク456</a> というふうに出力されてしまいます。 文中に入力されたURL部分をリンクに置き換えつつ、 [[link(http://hoge.com?id=123):リンク456]] のように記述されている個所を <a href="http://hoge.com?id=123">リンク456</a> と置き換えるには、どうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • 接続プロトコル (HTTP, HTTPS) を指定してURLアドレスを記述する場合、相対パスは使用不可?

    標記の件で質問です。 <a href="......">、<img src="......"> 等を使用してURLアドレスを記述する場合、HTTP → HTTPS またはその逆に HTTPS → HTTP へ遷移する場合、接続プロトコルを記述する必要がありますが、この場合、相対パスは使用できないのでしょうか? (試してみたところ、絶対パスでないと駄目なようですが) # コンテンツの保守性を左右するので、できれば絶対パスの使用は避けたい......。 ご存知の方、RFCに明るい方、ご教示頂けると助かります。

    • ベストアンサー
    • HTML
  • URLエンコードについて

    「 † 」 の文字をUTF-8 でURLエンコードした時の値が2種類あるんでしょうか。 以下の2つのURLエンコードした文字を %EF%BC%8D %E2%80%A0 URLエンコード/ デコードの結果を出力してくれる こちらのサイトと https://www.tagindex.com/tool/url.html こちらのサイト https://tech-unlimited.com/urlencode.html で結果が異なるみたいです。 なぜこういった結果が異なる状況が生まれるのでしょうか そして正しいのはどちらなのでしょうか

  • 正規表現を使って?

    置換の正規表現を使ってこのURLを (例) <A href="http://123.com/456/789/"><IMG src="http://123/456/789.jpg" border="0"></A> <A href="http://123.com/456/789/">リンク先</A> このようにしたいです。 <A href="http://tesuto=http%3A%2F%2F123.com%2F456%2F789%2F"><IMG src="http://123/456/789.jpg" border="0"></A> <A href="http://tesuto=http%3A%2F%2F123.com%2F456%2F789%2F">リンク先</A> :は%3aに /は%2fに 最後にリンク先のURLにhttp://tesuto=を追加したいです。 (<IMG src="からのURLはそのままにしたいです。) ちなみにhtml内には様々なタグが入っていてリンク先も様々なURLが書かれているとします。 (http://123.com/456/789/やhttp://123.com/456/789/abc/dehg/など) 正規表現についてはまったく分からず悩んでいます。 どなたかよろしくお願いします。

  • preg_match と正規表現 で URL抽出

    HTMLのデータが入っている変数 $data から、一番初めにでてきた<img>タグに囲まれるURLと、そこに<a>タグがある場合はそのリンク先のURLを取得させたいのですが、もし<a>のない場合のケースでどう条件付ければよいかわからず、困っています。 <? $data = "<html><head></head><body>こんにちは、元気ですか? <a href=\"http://www.hoge.co.jp\"><img=\"http://www.hoge.co.jp/hoge.jpg\"></a> <img=\"http://www.hoge02.co.jp/hoge02.jpg\"> </body></html>"; if (preg_match("#<a href=\"(.+)\"><img=\"(.+)\"></a>#", $txt, $reg)){ $link = $reg[1]; $url = $reg[2]; } echo "URL = {$url}<br> LINK = {$link}"; ?> この場合、一番初めに出てきた hoge.jpg のURLとLINK両方取得してくれますが、もし hoge02.jpg が先に来た場合、そのURLを取得させるようにしたいのですが可能でしょうか? もし何かご存知の方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 一つの行にURLが複数ある場合の、URL抽出方法は?

    htmファイルの中から、リンクされたURL情報を抽出するのが今回の目的です。 ご相談したいのは、URL情報が一つの行中に複数ある場合の抽出方法です。 ちなみに「一つの行にある<a href>リンクが一つだけ」の場合ですと、正規表現 <a +href=('|\").*('|\") *> でURLデータを正しく抽出できるところまで来ています。 ですが一つの行にある<a href>リンクが2つ以上あった場合は、最長一致のルールに従って、うまく抽出できません。 具体的に申し上げると、 ケース1:<a href="www.hoge.htm">ほげ</a> <a href="www.hoge.htm"> が抽出できる。 ケース2:<a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm">ほげほげ</a> <a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm"> が抽出される。(本当は2つを別々に取り出したい)

専門家に質問してみよう