質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.22%

【Chrome】リンクをurlencodeしてもアドレスバーに日本語で表示される。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,754

k499778

score 521

現在CakePHP3,PHP,ctpを使ってリンクの処理を実装しています。

そのリンクのクエリパラメータの中に「名前」があるのでurlencode()を使ってURLエンコード化しました。

↓ctp

<a href="https://teratail.com/hoge?name=urlencode( <?= &name => )">

しかし、そのリンクを押下するとアドレスバーには日本語表記で表示されてしまいます。
ブラウザは「Chrome」です。「IE」だとアドレスバーにエンコード化されて表示されました。

ソース上のリンク自体はデベロッパーツールでエンコード化されているのを確認済みです。

アドレスバーの「名前」パラメータをエンコードして表示することはできないのでしょうか?
Chromeの仕様の可能性が高いので無理なのでしょうか?

参考:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1223666462

もし難しい、あるいは、かなり作りこむ必要があるといった場合、アドレスバーをそこまでしてエンコード化する必要はあるのでしょうか?

一応上司から『「名前」パラメータはエンコードするように』と軽く言われただけで、上司もそのような事情を知りません。
もしできない、あるいは、かなり作りこむ必要がある場合、「日本語部分」が見えても仕方がないという判断を下してもいいでしょうか?

まだまだ自分では判断しかねるので、もしアドバイスがあれば教えていただきたいです。

またデコード(urldecode)をコントローラクラスでする必要はないのでしょうか?現状デコード処理無しで
想定の動きを実現できています。問題無いでしょうか?

併せてお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

上司に確認をとってみてください。日本語部分を秘密にせよとの意味ではないと思いますよ。
ブラウザの誤作動を防止するためだと思います。
見えて困るのなら、もっときちんと暗号化しなければなりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/15 20:00

    回答有り難うございます。

    そうですね。確認をとってみます。
    やはりアドレスバーにエンコードされて表示されないのは
    Chromeの仕様ですよね?
    もしお分かりであれば教えていただけると助かります。

    キャンセル

  • 2016/06/15 20:07

    わざわざ変更しているわけですから、仕様だと思います。
    Chrome はアドレスバーで検索を行うことを推奨していますから、その履歴のためじゃないでしょうか?

    キャンセル

  • 2016/06/15 20:15

    返答ありがとうございます。
    承知いたしました(^^)

    キャンセル

check解決した方法

+1

urlencodeを二重にすることで解決することができました。

phpがわでもurldecodeが必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/16 12:28 編集

    2重にした場合の遷移先の挙動は確認されましたか?

    通常そのような処理は行いませんので、パラメータが無効となり表示されている内容が意図してないものになっている可能性があります。

    仕事で行われてるとのことなので、上司の方が指示された内容が『「名前」パラメータはエンコードするように』でしたらURLバーの表示を変えることが目的ではありません。

    urlencodeは(この場合)PHPが受け取る$_GETのデータが文字化けしないように処理するものですよ。

    きつい表現になりますが私が上司で2重にurlencodeされていたら頭を抱えてしまいます。

    キャンセル

  • 2016/06/16 21:48 編集

    動作確認はもちろんして正常に動くのを確認しました。

    urlエンコードに関しては私も同じ認識で、
    2バイト文字や制御文字といった紛らわしい文字が入り込むのを防止するためで、ブラウザが認識できる形に変えること。だと思っています。

    なので一重のurlエンコードでアドレスバーには日本語が表示されてしまっているが、目的はそこではないのでいいのではないかと提案いたしました。

    しかし、アドレスバーに日本語が表示されているのはあまり見たことがないということで、何とかするように頼まれました。

    そこで調べた結果以下のサイトに出会い、
    http://chickenheartnote.web.fc2.com/menu/program/PHP/MailtoShowURLEncodeString.html

    二重にエンコードをする方法でアドレスバーにもエンコード文字を表示し、動きも問題なく動かすことができました。

    私自身も気持ち悪いなとは思っていますが、要望もあり、他の方法が見つからないのでこのように対応しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる