【 HP作成質問箱 】

新しい質問は「新規入力」ボタンをクリックしてください。
| Page-1

【HP作成質問箱/詳細】 一覧 / 詳細

  No.9954 文字化け
[oyama] [ブラウザ]  09/06/15 (月) 09:45
PHPは文字化けしないのですが、

$param=@ARGV[0];

http://○○○/exa.cgi?ANIMEドラえもん

URLに日本語が含まれていると、日本語が文字化けして今います。
対策方法は無いでしょうか?
  No.9955 Re:文字化け
[oyama] [ブラウザ]  09/06/15 (月) 09:52
「追加」
CGI(Perl)だと、文字化けしてしまいます。
  No.9956 Re^2:文字化け
[atom] [ブラウザ]  09/06/15 (月) 10:17
Perlは基本的にeuc-jpコードが標準のようです。
Windowsは基本sjisですよね?
その文字コードの違いにより文字化けするのです。

入力パラメータで日本語を扱うには、日本語処理の機能を組み込む必要があります。

掲示板で説明するのは難しいので、Googleの検索結果を貼っておきます。
http://www.google.co.jp/search?hl=ja&q=perl+%E6%97%A5%E6%9C%AC%E8%AA%9E+%E5%A4%89%E6%8F%9B&lr=&aq=4&oq=perl+%E6%97%A5%E6%9C%AC%E8%AA%9E

  No.9959 Re^3:文字化け
[oyama] [ブラウザ]  09/06/15 (月) 20:05
require "jcode.pl";
$param=@ARGV[0];
jcode::convert(\$param,'euc');
print $param;

と記述しましたが、サーバーエラーでは無いようですが、
何も表示されません。
  No.9960 Re^4:文字化け
[atom] [ブラウザ]  09/06/15 (月) 23:04
「jcode.pl」は同一フォルダに設置しましたか?

どんな状態でテストされてるのかよくわかりませんが、上記のような記述ではエラーで実行されないでしょう?

通常であれば、まずは次のようなテストをするべきですが。
このような簡単なテストはされたのでしょうか?

難しいことを一度にせず、簡単なテストをたくさん繰り返して、どこまでなら正しく動作するのか、テストをすべきですよ。

#!/usr/bin/perl
#↑この行は半角で記述する

require "jcode.pl";
$param="日本語テスト";
jcode::convert(\$param,'sjis');

print "Content-type:text/html\n\n";
print $param;
  No.9961 Re^5:文字化け
[oyama] [ブラウザ]  09/06/16 (火) 09:09
>「jcode.pl」は同一フォルダに設置しましたか?
設置しています。

「jcode.pl」を作成し、
http://srekcah.org/jcode/jcode.pl-2.13
からダウンロード(コピー)しました。

しかし、
500サーバーエラーになってしまいます。
require "jcode.pl";
$param="日本語テスト";
jcode::convert(\$param,'sjis');

print "Content-type:text/html\n\n";
print $param;
  No.9963 Re^6:文字化け
[atom] [ブラウザ]  09/06/16 (火) 16:45
私がサーバーでテストしたらちゃんと表示されましたがねぇ。

では2箇所潰した、次のような記述では正常に表示されるのでしょうか?

#require "jcode.pl";
$param="日本語テスト";
#jcode::convert(\$param,'sjis');

print "Content-type:text/html\n\n";
print $param;

それと、テスト用のCGIと「jcode.pl」のパーミッションは「755」になってるでしょうか?
  No.9964 Re^7:文字化け
[oyama] [ブラウザ]  09/06/16 (火) 19:31
はい。
正常に表示されました。
  No.9965 Re^8:文字化け
[atom] [ブラウザ]  09/06/16 (火) 22:27
では、

require "jcode.pl";
$param="日本語テスト";
#jcode::convert(\$param,'sjis');

print "Content-type:text/html\n\n";
print $param;


これでは?
この方法は、定義しただけで実際には呼び出してません。
  No.9966 Re^9:文字化け
[oyama] [ブラウザ]  09/06/17 (水) 08:42
ありがとうございます。

サーバーエラーが発生してしまいました…
  No.9967 Re^10:文字化け
[atom] [ブラウザ]  09/06/17 (水) 18:07
となると、

require "jcode.pl";

この行がおかしいということになります。

これは単純に「jcode.pl」を読み込むだけですが、それがエラーになるということですね。

なら、
1.「jcode.pl」が存在しない。
2.「jcode.pl」が壊れてる。
3.「jcode.pl」が正しく設置できてない。
4.パーミッションが間違ってる。

などが考えられます。

サーバーに設置した「jcode.pl」のファイル名を「jcode.txt」に変更し、この掲示板に添付してください。

こちらでも確認してみます。
  No.9968 Re^11:文字化け
添付 [oyama] [ブラウザ]  09/06/17 (水) 19:38
ありがとうございます。
ファイルを振付けます。
  No.9969 Re^12:文字化け
[atom] [ブラウザ]  09/06/17 (水) 19:47
やっぱり..

これじゃあエラーになります。
改行が全く入ってません。

画面上のものをそのままコピーしましたね。
本当は「ソース表示」してそれを張りつけるか、ちゃんとダウンロードしないとだめですよ。

次の方法を試してみてください。
1.そのリンクを右クリック
2.「対象をファイルに保存」をクリック
3.名前を「jcode.pl」にして保存

それでもうまくいかない場合はこちらで方法を考えます。
  No.9970 Re^13:文字化け
[oyama] [ブラウザ]  09/06/17 (水) 19:54
ありがとうございます!
試してみたら上手くいきました!

しかし、
【記述】
require "jcode.pl";
$param=@ARGV[0];
jcode::convert(\$param,'sjis');

print "Content-type:text/html\n\n";
print $param;

【アクセス】
http://○○○/exa.cgi?ANIMEドラえもん

パラメータを取得すると、文字化けしてしまいます
  No.9971 Re^14:文字化け
[atom] [ブラウザ]  09/06/18 (木) 12:47
いろいろ調べてみました。

すると「jcode.pl」は、内部(スクリプト内)の文字のコード変換には有効ですが、パラメータ入力の日本語に対してはどうしてもうまくできませんでした。

それはブラウザが標準でsjis、ところがperlはeucが標準のため、パラメータを受けた時点で既に文字化けしてる可能性がありそうです。

そこで、よそ様のcgi、また、このサイトの提供しているスキンボードcgiで使用している方法の方が近道だと感じてきました。

それは「cgi-lib.pl」を使用する方法です。

■ 作成サンプル
require 'cgi-lib.pl'; #&ReadParse(*in)の為必要

&ReadParse(*in);

( $key, $value ) = each( %in );
print "Content-type:text/html\n\n";
print "$key";

です。

また、呼び出し方法は、urlエンコードをして呼び出す必要があります。

×exa.cgi?ANIMEドラえもん
○exa.cgi?ANIME%83h%83%89%82%A6%82%E0%82%F1

上記の説明で専門的な知識がいろいろ出てきますが、ネット検索などで調べてください。
ここの掲示板で説明してるときりがありませんから。
  No.9972 ありがとうございました
[oyama] [ブラウザ]  09/06/18 (木) 20:47
ありがとうございました。
| Page-1

 一覧 / 詳細


page update:23/11/28 16:31

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom