dポイントプレゼントキャンペーン実施中!

以下のようにすると日本語の受け渡しがうまくいきません。(抜粋)
そももこの場合、日本語の受け渡しは、出来ないのでしょうか。
それともコンバートのやり方がまずいのでしょうか。
お知恵をおかしください。宜しくお願い致します。

URL:test.cgi?name=日本語

#!/usr/local/bin/perl
require './cgi-lib.pl';
require './jcode.pl';
# 読込
&getinput;
$name = $form{'name'};
print "Content-Type: text/html\n\n", $name;
exit;

sub getinput
{
&ReadParse;
while (($key,$val) = each %in) {
&jcode'convert(*val, "sjis", "", "z");
$form{$key} = $val;
}
}

A 回答 (4件)

この問題は、かなり以前にわたくしもぶつかったことがあり、他人事と思えなかったので解答させて頂きたいと思います。



URL(現URI)の中には半角文字といえども使うと不都合が生じる文字があります。
たとえば、「?」や「&」は用途が限定されているので変換しないと受け渡される側で問題が生じます。
日本語の場合は全角文字として2バイト以上のコードを使いますので見かけ上は文字列でも見えない部分で禁則文字が使われる可能性があります。
よって、GETメソッドなどで限定されないパラメータをCGIに受け渡す場合は、URLエンコードを行うのが基本となります。
cgi-lib.plのReadParseには自動でデコード機能がついておりますので、受け取り時のデコードは気にしなくても良いと思います。
ただし、上記のものは強制できることではありませんので、問題が生じるリスクを覚悟で、やる・やらないは自由にしてください。

文字化けに関しては、利用されている環境が不明なので(というか普通は誰がどんな環境でアクセスするかわからないですね。)、こちらのサンプルの場合、出力内容がHTMLではないのに「text/html」となっており、redfox63さんの仰る通りに強制的に文字コードを指定したHTMLを出力するのがまず「ありき」かと思います。
上記点で解決しないのなら、ご自身のブラウザの表示設定がおかしいと思って間違いありません。
HTMLでなく「text/plain」として出力を行うのであれば、かならずブラウザ側の表示設定にて日本語コードを調整する必要があります。

CGIに渡すパラメータは出来るだけPOSTメソッドにすることをおすすめいたします。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

やはり、POSTメソッドに落ち着く!!
GETメソッドでもうまくいけば、ログ項目を変更せずにそのままつかえたのですが・・・残念!!

お礼日時:2006/10/24 13:47

<html>


<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<meta http-equiv="Content-Language" content="ja">
<title>Test Perl</title>
</head>
<body>
<form name="oForm" method="post" action="test.cgi" target="myFrame">
<input name="name" value="日本語"><input type="submit" value="送信">
</form>
<iframe name="myFrame" src></iframe>
</body>
</html>
といったソースでうまく表示できてます
このHTMLファイルを EUCで保存して IIS5.1で実行してますが文字化けはしないようですよ
ブラウザのソース表示では文字化けしますけどね ... メモ帳ですから
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

以下の記述でボタンなどをクリックせず表示させたいのですが、良い方法はないものでしょうか。

<iframe src="test.cgi?name=花子" width=500 height=100 scrolling=no frameborder=0 marginwidth=0 marginheight=0></iframe>

お礼日時:2006/10/24 12:57

日本語はURLエンコードをした上でURLにセットしてください。

出力されるHTMLの文字コードとperlソースの文字コードが一致してることを注意してください。

my $URLencode = '日本語';
$URLencode=~s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
$URLencode=~s/\s/+/g;

として、

URL:"test.cgi?name=".$URLencode
てな感じにしてください。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

>日本語はURLエンコードをした上でURLにセットしてください。
URLエンコードしないでやる方法は、無いのでしょうか。

これがうまくいけば、HTMLのIFRAMEタグで、CGIを実行し、日本語検索でデータを抽出できるのではと思っています。

お礼日時:2006/10/24 09:14

Content-typeの出力時に charset=shift_jisなどを追加してみてはいかがでしょう



print "Content-type:text/html;charset=shift_jis\n\n", $name;
といった具合です
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
試しに行って見ましたがこちらも結果NGでした。

お礼日時:2006/10/24 00:08

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