フォームから受け取った文字コードの処理において、普段下記の通りにしております。
use Jcode;
&ReadParse;
while(($k,$v)=each %in){
&Jcode::convert(\$v,"euc");}
基本的に元htmlがsjisだろうがutf-8だろうが問題なくeucに変換されているのですが、
複数選択(フォーム側がチェックボックスなどで、NAME値が複数ある場合)された変数だけは、eucに変換されず文字化けしてしまい、肝心の区切り文字である「\0」も消えてしまう状態です。
&Jcode::convert(\$v,"euc");の部分を、$v にしたり *v にしたり色々してみたのですが、複数選択が正しく処理されているときは単一項目がうまくいかなかったりという状態です。
getcodeで調べてみると、複数選択のフォームのコードは ucs2 となっていました。(元のhtmlはeuc。)
試しにvalue値を全て半角英数にしてみたのですが、同じく ucs2 と出ます。(単項目は euc と出ます。)
「\0」が含まれた文字列の変換を行う場合は、何か特別な処理が必要でしょうか?
No.1ベストアンサー
- 回答日時:
&ReadParse;
これは、cgi-lib.pl の関数ですよね?
$in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator
キーが同じものが存在する時、データが消失しないように繋いでいますが、区切り文字は、送信文字に使われる可能性のあるものでは、あとで区切り位置が狂ったりするので、どの文字コードにも使われない\0を使っているのでしょう。
チェックボックスデータであることが確実なら、データに入っていないであろうタブコードか改行コードに置き換えてから、文字コード変換するのがよいかと思います。
以下の一行をwhile文の次に追加
$v =~ tr/\0/\t/;
>チェックボックスデータであることが確実なら、データに入っていないであろうタブコードか改行コードに置き換えてから、文字コード変換するのがよいかと思います。
ご回答ありがとうございました。
無事、「$v =~ tr/\0/\t/;」で区切りの\0をタブに待避させ、また元に戻してやることで、文字コードの変換がうまく行きました。
本当にありがとうございました。
「\0」の区切りはcgi-lib.pl固有のものだったんですね、、、お恥ずかしいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大文字、小文字のコードの打ち方
-
戻り値の意味がわかりません…
-
jcode.plのconvertを使用しなけ...
-
常用漢字?でない文字を判定す...
-
パイソンエラーについて
-
pythonエラー
-
全角入力
-
GoogleAppsScript文字列置換の...
-
全角/半角キーをSendkeys関数で...
-
住宅にカナを入力する際に丁目...
-
CSVファイルの中で、「 , 」カ...
-
VBA EXCEL あるセルの中の一...
-
バッチファイルの正規表現を利...
-
マクロを使ってフォルダー内に...
-
メールのcsv添付ファイルの種類...
-
正しいメールアドレスの形式で...
-
プログラミングでは、半角括弧...
-
VBAの文字列の中に”(全角のダブ...
-
エクセルの区切り位置の設定方法
-
C#で空白行を削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
戻り値の意味がわかりません…
-
文字化けを元に戻せますか?
-
正規表現でカンマを対象にする方法
-
utf-8のマシンでsjisのデータフ...
-
unicodeの表示
-
ダブルクォート文字などをフォ...
-
チェックボックスの複数選択の...
-
jcodeを使ったgetcode
-
jcodeでsjisに変換できない
-
特殊文字をPOSTした際の動作は?
-
テキストエリアに半角「\\」ま...
-
文字化けの事で?
-
機種依存文字の文字コード変換
-
jcode.plについて
-
文字実体参照が勝手に変換され...
-
「数値文字参照への変換するソ...
-
nkfとjcodeの使い方の違いについて
-
半角と全角の文字数カウント方法
-
常用漢字?でない文字を判定す...
おすすめ情報