Perlのcgi-lib.plでデコードされた文字をUTF-8にエンコードするにはどんなコードを書けば良いのでしょうか。
"あ"という文字をHTMLフォームから受取って%82%A0というS-JISのバイトコードに再エンコードするコードを質問したら
$a = "あ";
$a =~ s/([^a-zA-Z0-9*\-.@_])/sprintf("%%%02X", ord($1))/eg;
$a =~ s/%20/+/g;
print $a;
という答えを頂きました。コードの意味はよく判らなかったのですが、ちゃんと思惑通り$aは%82%A0になりますので長い間重宝にさせていただいています。
今度は$a="あ";の値をUTF-8の%E3%81%82にエンコードしたいのですが、どのように上記のコードを変更すればよいか教えてください。正規表現というのを使えば出来るのでしょうが、本で読んでもやっぱりわかりません。
No.2ベストアンサー
- 回答日時:
> データの送信元のHTMLがUTF-8ならば、一旦cgi-lib.plで
> デコードされた文字も私が使っているコードのままでUTF-8に
> 再エンコードされるということでしょうか?
そのとおりです。
ただ、例外としてformにaccept-charsetを指定するなど
送信する際の文字コードを別途指定した場合はそれに従います。
EncodeもCGIもこれまでのライブラリーと同じように使えるようにする書き方と
オブジェクト指向っぽくする書き方の両方ができるのでいろいろと試してみると
面白いと思います。検索するとドキュメントもかなり豊富ですよ。
No.1
- 回答日時:
"あ"がUTF-8でエンコードされていたら何も考えずに同じコードで
いけると思います。
つまり、ファイルをUTF-8で保存しておくとUTF-8が出力されます。
しかしながら、"あ"が何の文字コードで書かれていたとしてもUTF-8に
変換した上でURLエンコードする方法を教えた方がよいと思うので、
そのコード例を書いてみます。
以下、Perl 5.8以降でしか動作しませんが、5.8以降では標準となる
書き方だと思います。
use CGI;
use Encode qw(from_to);
use Encode::Guess qw/euc-jp shift-jis/;
my $a = "あ";
from_to($a, 'shift-jis', 'utf-8'); # Shift-jisで書かれた"あ"をutf-8に変換
$a = CGI::escape($a); # $aをURLエンコードして$aに代入
print $a;
from_toのところは文字列が不明で推測したいときは'shift-jis'の代わりに
'Guess'を使います。ただ、今回の'あ'のように文字列が短く、
判断が難しい場合は推測に失敗します。
...昔ながらのPerlプログラマーはあまりライブラリを使いたがら
なかったりしますが、ライブラリを使えるところはライブラリを
使った方が楽ですよ。
まずはご回答ありがとうございます。
> "あ"がUTF-8でエンコードされていたら何も考えずに同じコードでいけると思います。
データの送信元のHTMLがUTF-8ならば、一旦cgi-lib.plでデコードされた文字も私が使っているコードのままでUTF-8に再エンコードされるということでしょうか?
> しかしながら、"あ"が何の文字コードで書かれていたとしてもUTF-8に変換した上でURLエンコードする方法を教えた方がよいと思うので・・・
教えていただいたコードを試してみたいと思います。もっとも私のパソコンの環境が古いのでセットアップしなおしからですが、いい機会です。重ねてお礼申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームメールを受信すると文...
-
utf-8でメールを送信すると件名...
-
&jcode'convert(しても文字化け...
-
文字コードsjisをUTF8に書き換...
-
ポインター引数の関数でコンパ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
printfの%eで指数部分の桁数を...
-
memcmp バイナリデータの比較方法
-
3バイト文字(UTF-8)をprintfで...
-
Javaで日本語1文字のバイト数
-
stable diffusionのエラー
-
ソケット通信の受信サイズ
-
改行コードがそのまま表示され...
-
テキストエリア内でタグ<BR>を...
-
html→aspxへのタグ変換方法
-
Excel VBA メール作成について ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
&jcode'convert(しても文字化け...
-
CGIプログラムを使った申し込み...
-
全角カタカナチェックについて
-
ESC/Pのテキスト印字の制...
-
ソ噂浬欺圭構蚕十申曾箪貼能表...
-
CGIメールフォームのメールが文...
-
Perlのcgi-lib.plでデコードさ...
-
Perl でメール送信プログラム。
-
CGIフォームから飛ばすメールが...
-
この日本語の文章をリコーディ...
-
文字化け
-
utf-8でメールを送信すると件名...
-
ECUコードのCGIを編集す...
-
文字化け
-
PerlのCGIで全角スペースを入れて
-
SQLServerへの出し入れで文字化け
-
文字化けとパスワード変更
-
.cgi でタグが勝手に変換されま...
-
CGIについてです。教えて下さい...
-
掲示板CGIでの半角カナ使用につ...
おすすめ情報