スレッド表示 | フラット表示〕 全トピック 920 件中 19 番目 次≫ ≪前

クエリ送信による外字文字化け

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~省略
reply: 4339 返信 編集 削除

[4339] 外字を保持する

user: ゆうじ | created: 2009-10-14 23:31
こんばんわ。まず、外字というだけあって
文字エンコーディングの範囲外にある文字なので
コンピュータが変われば表示すらできないこともありえます。
また文字エンコーディング変換すると元データが失われてしまいます。
そういう代物です。

外字は、文字エンコーディングの影響を受けない
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進数表記」に
変換せしめてるのがみそです。
Parent: 4338  reply: 4340 返信 編集 削除

[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 ,"名前"));

という感じで書きました。

よろしくお願いします。
Parent: 4339  reply: 4341 返信 編集 削除

[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

echo mb_convert_encoding('文字', 'HTML-ENTITIES', 'EUC-JP');
Parent: 4340  reply: 4342 返信 編集 削除

[4342] 復元ができません。

user: sasuke | created: 2009-10-19 13:04
ゆうじさん

ありがとうございます。

マニュアルしっかり読んでいなくで申し訳ありません。

教えて頂いたmb_convert_encodingにてDBへ保存したのですが
やはり復元ができません。

復元もmb_convert_encodingにて行っています。

なにか他に原因があるのでしょうか?
Parent: 4341  reply: 4343 返信 編集 削除

[4343] 想定通りでない値を探しましょう

user: ゆうじ | created: 2009-10-19 23:30
各所で変換前後の値をダンプして確認してください。
想定通りの値でないところが見つかれば原因が絞れるでしょう。
Parent: 4342  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 19 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑