日本語URLへの移動について

このQ&Aのポイント
  • Perl、CGI初心者の方がHTMLのフォームの選択結果を元にURLを生成し、日本語URLへアクセスするプログラムを作成していますが、日本語処理がうまくできずにNot Foundとなってしまう問題が発生しています。
  • URLに含まれる日本語の文字処理に関して、変換や変換後の文字列の扱いに問題がある可能性があります。
  • ファイルを開くのではなくリンクを貼る場合は正常に開くことができているため、処理方法の見直しやURLのエンコーディングなどを検討する必要があります。
回答を見る
  • ベストアンサー

日本語URLへの移動

Perl、CGI初心者です。 HTMLのフォームの選択結果を元にURLを生成し、 そのURLへアクセスするプログラムを作成しています。 URLはPDFファイルやWordファイルになり、URL(ファイル名)には 日本語が含まれています。 print "Location: $URL\n\n";としてURLへ移動するプログラムを 作成したのですが、日本語処理がうまくいっていない(?)ようで Not Foundとなってしまいます。 なお、NotFoundが表示された状態でブラウザ(IE6)の移動を押下すると テキストとしてPDFやWordファイルを開きます。 #NotFoundの時点ではブラウザの文字コードがISOになっています。 $URL =~ tr/+/ /; $URL =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge; &jcode'convert( *value, 'sjis' ); と日本語処理はしています。 また、ファイルを開くのではなく、以下のようにリンクを貼った場合は、 リンク先は正しく開くことができます。 <a href="$URL" target="_blank">$URL<a><br> 原因、対策を教えて下さい。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • kodomo55
  • ベストアンサー率57% (8/14)
回答No.1

今回の場合、URLエンコードが必要となります。 行っている処理は、URLデコードなので、逆です。 また、&jcode'convert(*value, 'sjis') は、 “$value”の文字コードを sjis に変換するので誤りです。 仮に、&jcode'convert(*URL, 'sjis') としても、 URLエンコードを行う前にSJISに変換する必要があります。 # 古臭いですが &jcode'convert(*URL, 'sjis'); $URL =~ s/(\W)/'%'.unpack("H2", $1)/ego; print "Location: $URL\n\n"; # どうでしょう?

rx_78_2
質問者

お礼

回答ありがとうございます。 解決しました。(SJISではだめでUTF8にしましたが) 参考になりました。ありがとうございます。

関連するQ&A

  • 日本語ファイルをURLに指定したい

    日本語ファイルをUNIXのWWWサーバに置き、 HTMLでリンクを張ったのですが、 404NotFoundになってしまいます。 日本語ファイル名でWWWサーバに置きたい場合、 どうすれば良いのでしょうか?

    • ベストアンサー
    • HTML
  • URLバーに日本語を表示させたい

    URLバーに日本語を表示させたいのですが、うまくいかずに困っています。 ドメイン名、ディレクトリ名、htmlファイル名どれも日本語にしたいです。 例えば以下のようにURLバーに表示させたいとします。 オーケー.com/悩み/日本語.html 私が行った手順としては ・「オーケー.com」 をPunycodeに変換 (xn--kcko8tb.com) ・「悩み」 をURLエンコード (%94Y%82%DD) ・「日本語.html」 をURLエンコード (%93%FA%96%7B%8C%EA.html) そして、このURLに飛ぶための<a>タグには以下のように表記しました。 <a href="xn--kcko8tb.com/%94Y%82%DD/%93%FA%96%7B%8C%EA.html">サイト</a> サーバにアップしてあるサイトの構成は 「index.html」 があって、同階層に 「悩み」(フォルダ) があります。 「悩み」 の中に 「日本語.html」 が置いてあります。 ------ しかしこれではうまくいきませんでした。 クリックすると飛ぶことは飛ぶのですが、 URLバーには FireFoxの場合 --- xn--kcko8tb.com/%94Y%82%DD/%93%FA%96%7B%8C%EA.html Crome、IE9の場合 --- オーケー.com/%94Y%82%DD/%93%FA%96%7B%8C%EA.html と表示されてしまいます。 FireFox、Crome、IE9 どれで見ても オーケー.com/悩み/日本語.html と表示させたいのですが。。 アップしたファイルのメタタグには、いずれも以下のように表記しています。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 他人のサイトを見ると、全て日本語で表記されているサイトもちらほらあり、 どうやってやっているのか、やり方を探しているのですが見つかりません。。 どなたかご存知の方いらっしゃいましたら、 お教えいただけないでしょうか。 何卒ご教授よろしくお願いいたします。。

    • ベストアンサー
    • HTML
  • ディレクトリ名を日本語URLにするには?

    MTでブログを運用しています。 トップドメインの日本語URLではなく ディレクトリを切る際に日本語URL化したいと思っています。 カテゴリ名やエントリー名を日本語化するのではなく 単にディレクトリ名だけを日本語化する方法を探しています。 http://abc.com/ディレクトリ名を日本語化するには?/   ↓(ディレクトリをUTFエンコードすると以下のようなURL) http://abc.com/%83f%83B%83%8c%83N%83g%83%8a%96%bc%82%f0%93%fa%96%7b%8c%ea%89%bb%82%b7%82%e9%82%c9%82%cd%81H/ サーバー上で新規ディレクトリを作る際に UTFエンコードした名称をつけるだけはサイトは表示されませんでした。 どなたか方法をご存知の方がおられましたらどうぞよろしくお願いします。

  • URLに日本語を交ぜたい

    http://oshiete1.goo.ne.jp/qa2986631.html こちらの方の質問を受け継ぎたいと思います。やりたいことは多分この方と一緒だと思うのですが、URLの中にURLエンコードされたものを含むURLを作りたいのです。質問はURLエンコードの仕方ではありません。 例「小津安二郎」を含む http://ja.wikipedia.org/wiki/%E5%B0%8F%E6%B4%A5%E5%AE%89%E4%BA%8C%E9%83%8E と言うような感じです。拡張子(.htmlまたはphp.cgiなど)は省略しなくてもよいです。URLを作りたいと書きましたが作ることは簡単で、アップロードも出来ました。 しかし、アクセスするとファイルが存在しないという結果になります。オフライン上でも同じです。例えば「暇.html」という事で「%E6%9A%87.html」や 「/%E6%9A%87/index.html」と言う方法も試しましたが開けませんでした。400HTMLエラーが出ます。ためしに%.htmlというファイルを作ってアクセスしましたがやはり開けませんでした。明らかに%が入っていることが問題のようです。%のエスケープ文字(?)%25も同様です。IEだけでなくFirefox,safariでもだめだったのでブラウザーではなくサーバーに問題があるのかと思います。属性の問題でしょうか?ネットで探したのですがSEOがらみの企業秘密的な部分があるのかよい解決策が見つかりません。 質問を整理しますと、どうすればURLにエンコードされた日本語を混ぜることが出来るのでしょうか?当初は単純で簡単なことだと思っていたのですが・・・。

  • 日本語ファイル名のアップロードとダウンロード

    日本語ファイル名のデータを、ブラウザ上のフォームを使ってWEBサーバにアップし、それらをブラウザに一覧表示させてリンクを張り、そのリンクをクリックするとダウンロードできるようなPHPスクリプトを作りたいと思っています。 URLエンコードを行い、日本語ファイル名を半角文字列に置き換えれば問題ないだろうと思ったのですが、URLエンコードされたサーバ上のファイルにさえアクセスできません。 サーバの文字コードがEUCなので、すべてEUCで作成しているのですが…。 例えば、「あ.txt」というファイルを、EUCで作成したフォームでURLエンコードをしてアップロードすると、「%A4%A4.txt」というファイルがサーバにアップされます。 そこで、「http://。。。/%A4%A4.txt」にブラウザでアクセスすると、403エラーが出ます。 次に、ブラウザに一覧表示させたリンク文字列を右クリックして保存しようとすると、「?¢.txt」というファイルを保存しようとするため、ファイルが見つからないとのエラーが出ます。 いろいろな文字コードでファイル名をエンコードしたり、PHPファイルの文字コードを変更したりして試してみたのですが、うまくいきませんでした。 どうすればいいのか教えていただけないでしょうか? なお、日本語は使わない方がいいということは承知しておりますが、数十個ある日本語ファイル名のデータを頻繁に更新しますので、その都度ファイル名を半角に書き換えることは避けたいと思っています。 元々のファイル名も、仕様により日本語である必要があります。 以下、当方の環境を記載いたします。 「ローカル」 WinXPsp2、IE6 「サーバ」 共有レンタルサーバ Apache

    • 締切済み
    • PHP
  • perlで、日本語を含むURL(勿論、エンコード)のページ作成を考えて

    perlで、日本語を含むURL(勿論、エンコード)のページ作成を考えています。 が、ファイルの作成まではうまくいくのですが、いざ、そのURLにアクセスすると 「not found」になってしまいます。 (FTPでのぞくと、確かに、そのファイルは存在するのに、 そのURLにブラウザーからアクセスすると「not found」になってしまいます) そこで、以下の様な小さな実験をしてみました。 <実験> %A3.html という名前のファイルを手動で作り、それをFTPでアップしたところ、 FTP上では「%A3.html」ではなく、「%25A3.html」と表示されました。 そして、 http://nantoka.com/%A3.html http://nantoka.com/%25A3.html 両方にアクセスしたのですが(nantokaの部分は架空のものです)、やはり両者とも「not found」になってしまいます。 ●なぜ、この様な現象が起るのでしょうか? ●どの様にすれば、この問題は解決するのでしょうか? 教えていただければ幸いです。 ちなみに、perlの中では、以下の様な処理をしています。 ---------------------------------------- # キーワードは、UTF-8エンコードサイトから引っ張ってきます。 $keyword="キーワード"; #URLエンコード use URI::Escape; $keyword = uri_escape($keyword); $pageurl ="p/$keyword?.html"; $body ="サイトの中身"; open( FH, '>',$pageurl); print FH "$body"; close( FH ); ---------------------------------------- これで、 http://nantoka.com/p/$keyword.html (例えば、http://nantoka.com/p/%8F%AC%91%F2%88%EA%98Y.html等にアクセスした時に、 ちゃんと表示させたいのです。今現在も、FPTで見ると、当該ディレクトリーに「%8F%AC%91%F2%88%EA%98Y.html」は 存在しているのですが、ブラウザーでアクセスすると「not found」になってしまいます。

  • 日本語をGETで渡す場合URLエンコードは必要?

    下記の例のように全角文字をaタグのGETメソッドでPHPに渡し、その全角文字で検索した 結果を表示するスクリプトを製作中なのですが、 日本語内に空白等もないですし、あらかじめ検索する語が決まっているので ブラウザはIE9とFIREFOX9.0.1で試しましたが両方とも文字化けすることなくOKでした。 このスクリプトを万人向けに公開する場合、URLエンコード必要なのでしょうか? 例: <a href="http://hoge.php?word=日本語">日本語</a>

    • ベストアンサー
    • PHP
  • ホームページのURLに日本語を使いたい

    http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=DVXA,DVXA:2005-16,DVXA:ja&q=%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2 ウィキペディア を グーグルで検索(上記URL)すると、 ja.wikipedia.org/wiki/ウィキペディア - 66k - 2005 というURLがヒットします。 通常、URLには、日本語が入っていませんが、今回の検索結果には、日本語が入っています。 このように、URLに日本語を入れるにはどうしたらいいのでしょうか? また、このように、日本語に最適化することで、グーグルのヒット率はあがるものでしょうか? 以上、宜しくお願い致します。

  • 日本語版Word2003で英文作成 日本語フォント

    日本語版 Word 2003で英語文書を作成しています。 最終的にはPDFにして相手に渡すのですが、PDFの中に埋め込まれるフォントに 日本語フォント(MS明朝 など)が埋め込まれていて、これを排除したいと思っています。 Wordで編集中に Ctrl-Aで全選択してArialなどにしてみて、PDF化したところ まだ日本語フォントが含まれてしまっていました。 何かやり忘れたことがあるかと思うのですが、どなたかお教えいただけますでしょうか。

  • perlでurlが正しいか判定したい

    perlでホームページのURLが正しいか判定したいのですが、ネットで調べていても出てくるのがメールアドレスの判定方法ばかりで、ホームページに関してのことがなかなか見つかりません。 if($url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}/) { } こんな感じで適当にやっていたのですが、なぜか ,(カンマ) のチェックをスルーしてしまったりと思うように制御できておらず、 http://www.din.or.jp/~ohzaki/perl.htm#httpURL このページを読んでもちんぷんかんぷんで、とりあえず if($url !~ /\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f ][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.) *[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\. [0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f] [0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A- Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f ])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*) *)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f]) *)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])* )?/){ } こんな感じで代入してみても予想どおり構文エラーとなってしまい、どうやればいいのか困っています。(あまりの長さに理解できていないためエスケープも一切させてないので、エラーが出て当然といえば当然ですが) そこまで厳密にでなくてもかまわないのですが、ホームページのURLに間違いがないかチェックする方法はないでしょうか。 (特に . と , や : と ; や ~ と ^ の入力間違い、スペースが入っていないかとか全角入力になっていないかなどをチェックしたいです)

    • ベストアンサー
    • Perl

専門家に質問してみよう