クエリ送信による外字文字化け
created: 2009-10-14 10:17 | modified: 2009-10-19 23:30 | reply: 5
[4338] クエリ送信による外字文字化け
user: sasuke | created: 2009-10-14 10:17
こんにちわ。
データベースより取得した値をフォームで表示(view.php)
↓
ボタン押下でクエリ送信
↓
データベースへ追加(db.php)
上記、大まかな流れのwebを作っています。
「髙」や「﨑」などの外字が入った時のみデータベースへ追加した項目が全て文字化けします。(c@F,^J_@^PqRのような)
view.phpの表示段階では問題ないのですがクエリ送信時に何か起きていると思われます。
コーディングなどの解決方法がありましたらご教示下さい。
view.phpのjavascriptを記載させて頂きます。
********************************************
//DBへ登録
function send_db() {
var a = document.getElementById("契約者名").value;
var b = document.getElementById("契約者名(カナ)").value;
var c = document.getElementById("契約者番号").value;
window.open('db.php?item0='+ a + '&item1='+ b + '&item2='+ c,'','width=400,height=400,resizable=yes');
}
***************db.php************************
$a = $_GET['item0'];
$b = $_GET['item08'];
$c = $_GET['item0'];
INSERT INTO~省略
データベースより取得した値をフォームで表示(view.php)
↓
ボタン押下でクエリ送信
↓
データベースへ追加(db.php)
上記、大まかな流れのwebを作っています。
「髙」や「﨑」などの外字が入った時のみデータベースへ追加した項目が全て文字化けします。(c@F,^J_@^PqRのような)
view.phpの表示段階では問題ないのですがクエリ送信時に何か起きていると思われます。
コーディングなどの解決方法がありましたらご教示下さい。
view.phpのjavascriptを記載させて頂きます。
********************************************
//DBへ登録
function send_db() {
var a = document.getElementById("契約者名").value;
var b = document.getElementById("契約者名(カナ)").value;
var c = document.getElementById("契約者番号").value;
window.open('db.php?item0='+ a + '&item1='+ b + '&item2='+ c,'','width=400,height=400,resizable=yes');
}
***************db.php************************
$a = $_GET['item0'];
$b = $_GET['item08'];
$c = $_GET['item0'];
INSERT INTO~省略
[4339] 外字を保持する
user: ゆうじ | created: 2009-10-14 23:31
こんばんわ。まず、外字というだけあって
文字エンコーディングの範囲外にある文字なので
コンピュータが変われば表示すらできないこともありえます。
また文字エンコーディング変換すると元データが失われてしまいます。
そういう代物です。
外字は、文字エンコーディングの影響を受けない
HTMLエンティティー等に一旦変換後DBに保存し
表示の際元に復元するというのはいかがでしょう。
Docomo携帯の絵文字も外字のうちなので
このスレッドも役立つかもしれません。
[3770] 正規表現で抽出した文字
http://www.sound-uz.jp/php/bbs/thread/3770?view=flat
これによって外字を 'BAD+' と「文字コードの16進数表記」に
変換せしめてるのがみそです。
文字エンコーディングの範囲外にある文字なので
コンピュータが変われば表示すらできないこともありえます。
また文字エンコーディング変換すると元データが失われてしまいます。
そういう代物です。
外字は、文字エンコーディングの影響を受けない
HTMLエンティティー等に一旦変換後DBに保存し
表示の際元に復元するというのはいかがでしょう。
Docomo携帯の絵文字も外字のうちなので
このスレッドも役立つかもしれません。
[3770] 正規表現で抽出した文字
http://www.sound-uz.jp/php/bbs/thread/3770?view=flat
mb_substitute_character("long");
$str = mb_convert_encoding($str, 'SJIS', 'SJIS');これによって外字を 'BAD+' と「文字コードの16進数表記」に
変換せしめてるのがみそです。
[4340] DBの問題?
user: sasuke | created: 2009-10-15 14:16
ゆうじさん
こんにちわ。
お世話になります。
HTMLエンティティーで変換後DBに保存というのを
やってみています。
DBへは無事、格納しましたが表示が復元できない状態です。
DBの問題が関係あるのでしょうか?SQL Serverです。
変換は
$item = htmlentities($_POST['名前']);
と記述して復元は
$item = html_entity_decode(odbc_result($r ,"名前"));
という感じで書きました。
よろしくお願いします。
こんにちわ。
お世話になります。
HTMLエンティティーで変換後DBに保存というのを
やってみています。
DBへは無事、格納しましたが表示が復元できない状態です。
DBの問題が関係あるのでしょうか?SQL Serverです。
変換は
$item = htmlentities($_POST['名前']);
と記述して復元は
$item = html_entity_decode(odbc_result($r ,"名前"));
という感じで書きました。
よろしくお願いします。
[4341] mb_convert_encodingでHTMLエンティティ変換
user: ゆうじ | created: 2009-10-15 22:31
htmlentities で変換できるのはHTML文字エンティティだけですよ。
ttp://jp2.php.net/manual/ja/function.get-html-translation-table.php
それ以外の文字のHTMLエンティティ変換は
mb_convert_ecoding で。
http://jp2.php.net/manual/ja/function.mb-convert-encoding.php
http://jp2.php.net/manual/ja/function.mb-list-encodings.php
ttp://jp2.php.net/manual/ja/function.get-html-translation-table.php
それ以外の文字のHTMLエンティティ変換は
mb_convert_ecoding で。
http://jp2.php.net/manual/ja/function.mb-convert-encoding.php
http://jp2.php.net/manual/ja/function.mb-list-encodings.php
echo mb_convert_encoding('文字', 'HTML-ENTITIES', 'EUC-JP');[4342] 復元ができません。
user: sasuke | created: 2009-10-19 13:04
ゆうじさん
ありがとうございます。
マニュアルしっかり読んでいなくで申し訳ありません。
教えて頂いたmb_convert_encodingにてDBへ保存したのですが
やはり復元ができません。
復元もmb_convert_encodingにて行っています。
なにか他に原因があるのでしょうか?
ありがとうございます。
マニュアルしっかり読んでいなくで申し訳ありません。
教えて頂いたmb_convert_encodingにてDBへ保存したのですが
やはり復元ができません。
復元もmb_convert_encodingにて行っています。
なにか他に原因があるのでしょうか?
[4343] 想定通りでない値を探しましょう
user: ゆうじ | created: 2009-10-19 23:30
各所で変換前後の値をダンプして確認してください。
想定通りの値でないところが見つかれば原因が絞れるでしょう。
想定通りの値でないところが見つかれば原因が絞れるでしょう。
