Perlのスクリプトで、MySQLにユーザー情報を登録しているのですが、
二つのDBに登録しています。
一つ目のDBはEUC-JPで、もう一つがUTF-8のMySQLになっています。
具体的には、最初はあるCMSのユーザー登録を別のPerlスクリプトで行い正常に保存されていたのですが、今年の春頃からWordpressも使う必要があり、そちらがUTF-8のDBなのです。
英数字なら問題なく登録可能なのですが、日本語が入ると、UTF-8のDBでは文字化け等が発生して、正常に登録されませんでした。
ちなみに、Perlスクリプト自体はEUC-JPで記述・保存されているファイルなのですが、先述の通り、先のCMS側のDBがEUC-JPなので、このPerl自体をUTF8にするわけにもいかず・・・
以下のようなソースになっています。
------------------------------------------------------------------------
# データベースへアクセス
$dbh = DBI -> connect ("DBI:mysql:$dbname:$dbhost",$dbusername,$dbpassword)
or show_ErrorPage('データベースにアクセス出来ません。');
#$dbh->do("set names utf8");
#$data{'username'} = decode('utf8', $data{'username'});
#$data{'username'} = encode("shiftjis",decode("euc-jp",$data{'username'}));
#$data{'username'} = encode("euc-jp",decode("utf8",$data{'username'}));
#$data{'username'} = Encode::from_to($data{'username'}, 'utf8', 'euc-jp');
#utf8::decode($data{'username'});
#$data{'username'} = Encode::from_to($data{'username'},'euc-jp','utf-8');
$sth = $dbh->prepare( qq{ INSERT INTO $table2 (ID,user_login,user_pass,user_nicename) VALUES("$rows[0]", "$data{'username'}","$data{'password'}", "$data{'username'}") } );
$sth -> execute()
or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)");
$sth -> finish();
$sth2 = $dbh->prepare(qq{ SELECT ID FROM $table2 WHERE user_login = "$data{'username'}"});
$sth2 -> execute()
or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)");
@rowss = $sth2->fetchrow_array;
$sth2 = $dbh->prepare( qq{ INSERT INTO $table3 (user_id,meta_key,meta_value) VALUES
("$rowss[0]","first_name",""),
("$rowss[0]","last_name",""),
("$rowss[0]","nickname","$data{'username'}");
$sth2 -> execute()
or show_ErrorPage("データベースを実行出来ませんでした。$DBI::err ($DBI::errstr)");
------------------------------------------------------------------------
少し省いている部分もあり、数字等に間違いがあるかもしれません。
このPerlはフォームスクリプトで、$data{'username'}にユーザー名を入力してもらいます。
それを「user_login」や「user_nicename」に登録をしたいのですが、先のEUC-JPのDBでは問題ありませんが、UTF8のDBでは空白になります。
その後色々調べてみて、上記コードの#の部分を追加して試してみましたが、空白ではないものの文字化けになったり数字になって登録されてしまうようになりました。
やりたいことは、「$data{'username'}」という変数をUTF8に文字エンコードをしてWordpress側のDBに登録を行いたいのです。
その後「perl utf8 フラグ」などのキーワードを知り調べてみましたが、具体的に自分の知識では解決できずに悩んでおります。
もし宜しければご教示頂けますと幸いです。
宜しくお願い申し上げます。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
データベースについてはわからないので、解決に役に立たないかもしれません。
Perl の Encode.pm の encode() と decode() には、一般の「エンコード/デコード」とは少し違ったところがあります。Encode.pm では、「デコード → エンコード」の順番で処理します。また、from_to() 関数は第1引数を直接コード変換して、戻り値として変換した文字数 (失敗した場合は undef) を返すので、元の変数に代入してはいけません。
$data{'username'} = encode("utf8",decode("euc-jp",$data{'username'}));
または、
Encode::from_to($data{'username'}, 'euc-jp', 'utf8');
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- PHP php ログイン 1 2022/11/01 00:24
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(コンピューター・テクノロジー) (コマンドプロンプト)コマンドプロンプトのactiveについて 2 2022/07/16 17:21
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
c言語の多次元配列で1から100ま...
-
System.Collections.ArrayList ...
-
c言語 Bitについて
-
PINVOKEで構造体配列をマーシャ...
-
C言語 ファイル内のデータと入...
-
【sed】変数に設定したコマンド...
-
C#でのswitch文
-
テキストファイルの結合について
-
パイソン、データーサイエンス...
-
POSTで配列のデータを渡す方法は?
-
printfの%eで指数部分の桁数を...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
パイソン、データーサイエンス...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
python 気象データの取得
-
テキストファイルの結合について
-
RegQueryValueExでの2バイト文字
-
linuxのシェルでファイル名に先...
-
'dataType' 引数を Null にする...
-
C言語についてです! 同じ年の...
-
オセロゲーム 2次元配列で困...
-
PINVOKEで構造体配列をマーシャ...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
System.Collections.ArrayList ...
おすすめ情報