以下のようにすると日本語の受け渡しがうまくいきません。(抜粋)
そももこの場合、日本語の受け渡しは、出来ないのでしょうか。
それともコンバートのやり方がまずいのでしょうか。
お知恵をおかしください。宜しくお願い致します。
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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
この問題は、かなり以前にわたくしもぶつかったことがあり、他人事と思えなかったので解答させて頂きたいと思います。
URL(現URI)の中には半角文字といえども使うと不都合が生じる文字があります。
たとえば、「?」や「&」は用途が限定されているので変換しないと受け渡される側で問題が生じます。
日本語の場合は全角文字として2バイト以上のコードを使いますので見かけ上は文字列でも見えない部分で禁則文字が使われる可能性があります。
よって、GETメソッドなどで限定されないパラメータをCGIに受け渡す場合は、URLエンコードを行うのが基本となります。
cgi-lib.plのReadParseには自動でデコード機能がついておりますので、受け取り時のデコードは気にしなくても良いと思います。
ただし、上記のものは強制できることではありませんので、問題が生じるリスクを覚悟で、やる・やらないは自由にしてください。
文字化けに関しては、利用されている環境が不明なので(というか普通は誰がどんな環境でアクセスするかわからないですね。)、こちらのサンプルの場合、出力内容がHTMLではないのに「text/html」となっており、redfox63さんの仰る通りに強制的に文字コードを指定したHTMLを出力するのがまず「ありき」かと思います。
上記点で解決しないのなら、ご自身のブラウザの表示設定がおかしいと思って間違いありません。
HTMLでなく「text/plain」として出力を行うのであれば、かならずブラウザ側の表示設定にて日本語コードを調整する必要があります。
CGIに渡すパラメータは出来るだけPOSTメソッドにすることをおすすめいたします。
回答いただきありがとうございます。
やはり、POSTメソッドに落ち着く!!
GETメソッドでもうまくいけば、ログ項目を変更せずにそのままつかえたのですが・・・残念!!
No.3
- 回答日時:
<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で実行してますが文字化けはしないようですよ
ブラウザのソース表示では文字化けしますけどね ... メモ帳ですから
回答いただきありがとうございます。
以下の記述でボタンなどをクリックせず表示させたいのですが、良い方法はないものでしょうか。
<iframe src="test.cgi?name=花子" width=500 height=100 scrolling=no frameborder=0 marginwidth=0 marginheight=0></iframe>
No.2
- 回答日時:
日本語は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
てな感じにしてください。
回答いただきありがとうございます。
>日本語はURLエンコードをした上でURLにセットしてください。
URLエンコードしないでやる方法は、無いのでしょうか。
これがうまくいけば、HTMLのIFRAMEタグで、CGIを実行し、日本語検索でデータを抽出できるのではと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Ruby vscode 文字化け 1 2022/05/21 19:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlで書いたcgiでsqliteの使い...
-
【ASP.NET MVC】フォームヘルパ...
-
入力フォームに全角・半角スペ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
VB初心者。小数点以下の表示で...
-
[HTML]プルダウンメニューの横...
-
チェックボックスの返す値
-
プルダウンメニューにテキスト...
-
onMouseoverで下線表示したい(...
-
htmlからパラメータで、cgiに渡...
-
普通のHTMLの画面からCG...
-
テキストBOXの縦幅
-
(Perl)ReadParseによるハッシ...
-
select値をhiddenのvalueに渡し...
-
sendmailからblatjへ
-
VB.net データーグリッドビュー...
-
INPUT TYPE
-
チェックボックスで選択した内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlで書いたcgiでsqliteの使い...
-
SUN BBSの改造方法
-
tracert ができない原因
-
日本語文字化け(GETメソッド?)
-
チェックボックスでのor検索
-
入力フォームに全角・半角スペ...
-
ネットワークサービスについて
-
【CGI】画像の表示の仕方【Mini...
-
【ASP.NET MVC】フォームヘルパ...
-
DataGridViewの行取得
-
掲示板スパム対策(改造)ガー...
-
CGI.pmを利用のテーブル表示に...
-
フォーム送信でログに保存
-
Windows7でVBScriptによるネッ...
-
CGIで合計を書き出す方法
-
同じname属性の結果を1行にまと...
-
perl ヒア文(print <<"EOM" ...
-
Webアプリケーションを作りたい!
-
ファイル名変更プログラム
-
禁止ワードの設定
おすすめ情報