電子書籍の厳選無料作品が豊富!

これからWebサイトを構築しようと考えており、その際に日本語が混じったURL構造にしたいわけです。みなさんどのように実装されているのでしょうか?

世の中を見渡すと下記のように日本語が混じっているケースがあるので不可能ではないのだろうと思います。

http://ja.wikipedia.org/wiki/自動車
http://www.amazon.co.jp/図解雑学 自動車のしくみ/dp/4816332383/ref=sr_1_9/250-1917324-0329026?ie=UTF8&s=books&qid=1178706552&sr=1-9

A 回答 (6件)

> 拡張子をつけたURL「

http://127.0.0.1/%E8%87%AA%E5%8B%95%E8%BB%8A.html の場合はWebサーバはきちんと認識してくれる筈だと思いますが、
> こちらも表示されないようです。あと一歩というところですが、何かが引っ掛かって表示されていないです。
今試せる環境(Windows XP SP2 上の AN HTTPD 1.42p)で試したところ、

・ファイル"%E8%87%AA%E5%8B%95%E8%BB%8A"にアクセスするには、
 %を%25にURLエンコード(URLエスケープ)して"%25E8%2587%25AA%25E5%258B%2595%25E8%25BB%258A"とする必要があった。
・ファイル"自動車"には、"自動車"を文字コードUTF-8でURLエンコードした
 "%E8%87%AA%E5%8B%95%E8%BB%8A"でアクセスできた。

という結果になりました。
(少なくともAN HTTPDでは、)リクエストURLはURLエスケープされたものとして扱われるようです。


ファイル"自動車"には、"自動車"でもアクセスできましたが、
"自動車"でも"%E8%87%AA%E5%8B%95%E8%BB%8A"でも、ブラウザ(IE6)がWebサーバに送るリクエストは、
 GET /%E8%87%AA%E5%8B%95%E8%BB%8A
で同じでした。(ブラウザが自動的にURLエンコードしているため。)

しかし、IEの設定で「常にUTF8としてURLを送信する」が有効になっていないと
必ずしもUTF-8でURLエンコードされないかもしれません。
また、他のブラウザで同じようにURLエンコードされるかどうかは分かりません。
さらに、サーバ環境によってはUTF-8以外でエンコードする必要があるかもしれません。

これらの事情が、ANo.1~3でURLエンコードしたファイル名を使うのが望ましいと言われている理由ですね。


ただURLエンコードするにしても、日本語ファイル名はできるだけ使用を避けた方がよいと思います。
wikiのようにphpなどのパラメータとなっているなら
同じphpプログラムを使っている限り期待通りに処理してくれるでしょうけど、
ファイル名だとそれを処理するのはWebサーバなので、
Webサーバを変えるとUTF-8でエンコードしたファイル名ではアクセスできなくなるということが起こるかもしれません。
(これに関してはサーバの設定次第でどうにかなりそうではありますが。)

また、サーバを通さずにローカルHTMLファイルをブラウザで開くとき、
使っているブラウザと文字コードによってはURLエンコード後のファイル名でファイルを開けないようです。
その結果、リンクが切れてしまうのでチェックするときに不便かもしれません。

そもそも、リンクするためにURLエンコードしなければいけないというのも面倒な話で、
これだけでも十分なデメリットな気がします。


もし、どうしても日本語ファイル名を使いたいのであれば
よく下調べはしておいた方がよいと思います。
私は日本語ファイル名を使ったことも使おうとしたこともないわけで、
まだ他にも私が知らない問題があるかもしれないので。
なお、使う文字コードはUTF-8が一番無難そうでした。
    • good
    • 0

> URL「

http://127.0.0.1/%E8%87%AA%E5%8B%95%E8%BB%8A 」で表示してくれることを期待していたのですが、結果は×です。
拡張子を消すと、そのファイルがhtmlであるという情報をWebサーバーが送信しなくなり、
ブラウザがhtmlと見なさずに表示しなくなることはあり得ます。
(具体的には、Webサーバーから送られてくるhttpヘッダのContent-Typeがtext/htmlになっていない。)

ApacheならDefaultType、
AN HTTPDならデフォルトMIMEタイプの設定で、
拡張子無しファイルのContent-Typeを変えられます。
http://www.st.rim.or.jp/~nakata/httpd-docs/optio …


余談ですが、URLから拡張子を消したいなら、
MultiViewsやmod_rewriteなどを使う方法もあります。

この回答への補足

参考になります。
拡張子をつけたURL「 ​http://127.0.0.1/%E8%87%AA%E5%8B%95%E8%BB%8A​.html」の場合はWebサーバはきちんと認識してくれる筈だと思いますが、こちらも表示されないようです。あと一歩というところですが、何かが引っ掛かって表示されていないです。

補足日時:2007/05/10 16:53
    • good
    • 0

> 実際のファイル名はどうなっているのでしょうか


素直に、"%E8%87%AA%E5%8B%95%E8%BB%8A"というファイルがあるという考えは無し?
(ファイル名に拡張子は必須ではないので無くてもおかしくはないよ。)

まあ、実際にはその部分はphpに渡される引数で、ファイル自体は存在しないと思います。
http://ja.wikipedia.org/w/index.php?title=%E8%87 …

この回答への補足

なるほど、wikipediaはパラメータ渡しだったのですね。この部分は疑問氷解です。

>ファイル名に拡張子は必須ではないので無くてもおかしくはないよ。
おっしゃるとおりなので自分の方でも愚直にこのページのソースをコピって「%E8%87%AA%E5%8B%95%E8%BB%8A」および「%E8%87%AA%E5%8B%95%E8%BB%8A.htm」というファイルを作ってみました。
URL「http://127.0.0.1/%E8%87%AA%E5%8B%95%E8%BB%8A」で表示してくれることを期待していたのですが、結果は×です。

補足日時:2007/05/10 09:07
    • good
    • 0

>ありがとうございます。

だとすると例に書いたようなamazonやwikipedeaは、一部のユーザを切り捨てていることになってしまうのでしょうか?

amazonやwikipediaの中には日本語のリンクは無いと思いますが?どこかにありましたか?

リンクを紹介するときに、http://ja.wikipedia.org/wiki/自動車 のように書いた人が切り捨てているわけです。悪いのはその人です。
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% … のように書くのが正しいです。これならどんなブラウザでも大丈夫。

この回答への補足

早速ありがとうございます。エンコードしたファイル名であれば良いということですね。ところで
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …
の場合、実際のファイル名はどうなっているのでしょうか?試したところでは下記のいずれでもありませんね。

http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95% …

補足日時:2007/05/10 02:37
    • good
    • 0

簡単に言うと、ブラウザが日本語を自動的に%と16進数の文字列に変換してサーバーに送信します。


サーバー側では、送られてきた %E3%82%A8 のような文字列を日本語に再変換して目的のページを探すわけです。ただ日本語の文字コード体系は複数あって、ブラウザがどの文字コードを使って送信するかはわからないので、通常ありえるすべてのケースに対応する必要があります。IEだけ対応するというとかなら絞れると思いますが。

またブラウザによってはそもそも日本語に対応していないものも考えられ、そういうブラウザのユーザーは切り捨てることになります。

この回答への補足

ありがとうございます。だとすると例に書いたようなamazonやwikipedeaは、一部のユーザを切り捨てていることになってしまうのでしょうか?

補足日時:2007/05/09 21:37
    • good
    • 0

http://ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83% …

日本語の可否はサーバソフトとクライアントの組み合わせによります。サーバ側ではクライアントを指定できませんから、サーバ側で対応する必要があります。
2バイト文字を含んでも良いように、URLエンコードを用いて文字コードに置き換えるのが一般的では。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!