URLのエンコードだけど、サーバーはどこでデコードしてんの?勝手にデコードしてパス通してくれんの?

投稿日:
2019.1.28
カテゴリー:
Web制作 , IT・科学
225:名無しさん 2019/02/23(土) 04:39:44.66 ID:JrYtnpMu

URLのエンコードについてよく分からんのだけど、

phpとかcgiの引数にエンコードした引数をおくると、phpやcgiで直すの?
ファイル名が日本語だった場合はどうなんの?
utf-8ならまだしもsjisだった場合は?
<img src=”./日本語フォルダ/日本語ファイル名.jpg”> とかってHTMLに書いてあった場合、それは勝手にurlエンコードされんの?ブラウザごとの使用?
URLがエンコードされてるとしたら、サーバーはどこでデコードしてんの?httpd的なソフト?勝手にデコードしてパス通してくれんの?

教えて偉い人

235:名無しさん 2019/02/23(土) 15:34:32.28 ID:???

>>225
基本的にはhttpdが処理する
まずURLに書かれた文字はブラウザによってURLエンコードしてからリクエストされる
アドレスバーやsrc属性に日本語入れて開発者ツールのnetとかで確認すればわかる
で、それをhttpdがデコードしてパスやファイルを判定して実行する
クエリストリングも同じでデコードしてからZPHPなどに渡す
なので$_GETなどで取得するとデコードされた状態

236:名無しさん 2019/02/23(土) 16:11:49.29 ID:JrYtnpMu

>>235
分かったありがとう!
日本語でurl書いて <A HREF=”日本語”> とか <IMG SRC=”日本語”> とかやったら 勝手にブラウザがURLエンコードしてくれるんだね
どのブラウザでも必ずやってくれるのかな?

そんで、エンコードされたディレクトリとファイル名は、HTTPDが勝手にデコードするので、問題なくパスが通ると。

クエリストリングってのはcgiとかの引数?かな?
cgiとかだとcgi側でデコード処理書くのが普通の気がするんだけど、そんなことないのかな?

あと、古いシステムも新しいシステムも、自動エンコードとデコードの仕様は同じ?ブラウザもHTTPDも。
このHTTPDだと自動デコードありませんとか、このブラウザだと自動エンコードありませんとか、そんなことが起きると面倒くさいんだよね

引用元: http://mevius.5ch.net/test/read.cgi/hp/1546055063/