[PHP-users 32037] Re: php+mysql+PrototypeをEUC-JP環境で運用したい。
KUBO Tetsuro
kubo @ calico.co.jp
2007年 4月 26日 (木) 19:54:42 JST
久保です。
切り分けるという意味では
サーバー側
[check_ajax.php]
<?
$file = "example.txt";
if(!file_put_contents($file,$_GET['input_data'])) {
file_put_contents($file,"データを受け取れず");
}
?>
とでもして、実際にどんな値が渡ってきているか調べてみてはいかがでしょう。
On Thu, 26 Apr 2007 17:21:16 +0900
高橋政利 <takahashi @ hoshino-dk.co.jp> wrote:
> 高橋です。
> いつもお世話になっております。
> PHPのMLで聞く事なのかと悩みましたが、他に無いので投稿させていただきます。
>
> 環境は
> Windows XP home SP2
> Apache 2.0.54
> PHP 5.1.4
> MySQL 4.0.24-nt
> PEAR 1.5.3
> です。
>
> ローカル環境で、社内WEBを作成・管理しているのですが、この度Ajaxを試用し
> てみようと思い、WEBサイトにて調査しました。
> Prototype.js が良さそうなので Prototype 1.5 を導入して以下のスクリプトに
> て非同期通信が出来るところまではできたのですが、マルチバイト文字で文字化
> けが発生してしまいます。
> Ajaxについては「UTF-8が基本」と紹介しているサイトをいくつも見ていました
> ので「やはり」とは思っていたのですが、EUC-JPで構築されたWEBアプリケーショ
> ンでのマルチバイトの取扱は不可能なのでしょうか?
> mb_convert_encoding やら mb_http_output やら マルチバイト文字列関数を色
> 々と試してみたのですが、ダメでした。なんか考え方の根底から間違えているよ
> うな気もします。
>
> Apache及びMySQLの文字コードはEUC-JPで統一しています。
> 運用中のサイトの修正を考えるとUTF-8に移行するのは、ちょっと気が重いです。
>
> 実行後の結果ですが、アラートには「??????を登録しました。」、MySQLには
> 「??????と入力」と出力されていますので、GETで引き渡しているマルチバイト
> 文字列のみが文字化けしている状態です。半角英数字では期待値で処理出来てい
> ますので、何処かで文字コードの変換をしてあげれば良いような気がします。
>
> どなたか解決策をご存じの方がいらっしゃいましたらご教授願います。
>
>
> PHPの設定は以下の通りです。
>
> output_buffering = Off
> default_charset = "EUC-JP"
>
> mbstring.language = Japanese
> mbstring.internal_encoding = EUC-JP
> mbstring.http_input = EUC-JP
> mbstring.http_output = EUC-JP
> mbstring.encoding_translation = On
> mbstring.detect_order = auto
> mbstring.substitute_character = none;
> ;mbstring.func_overload = 0
> ;mbstring.strict_encoding = Off
>
>
> コードは以下の通りです。
>
> サーバー側
> [check_ajax.php]
>
> <?php
> require_once("DB.php");
> $dsn = 'mysqli://hogehoge:hogehoge@localhost/ajax_db';
> $db = DB::connect($dsn);
> if (PEAR::isError($db)) { die($db->getMessage()); }
>
> $sql = 'INSERT INTO table1 (nyuji) VALUES (?)';
> //$data = array(1, 4);
> $data = $_GET['input_data'] .'と入力';
>
> $res =& $db->query($sql, $data);
> if (PEAR::isError($res)) { die($res->getMessage()); }
>
> echo $_GET['input_data'] .'を登録しました。';
> ?>
>
>
> クライアント側
> [test_ajax.php]
>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
> <title>てすと</title>
> <!-- Ajaxライブラリ prototypeを読み込む !-->
> <script src="../js/prototype.js" type="text/javascript"></script>
> <script type="text/javascript">
> //ボタンをクリックしたときのイベント
> function ajax_input() {
> var url = "check_ajax.php";
> var pars = "input_data=" + encodeURI($("input_text").value);
> new Ajax.Request(url,{method:"get", parameters:pars, onComplete:ajaxReturn});
> }
> // Ajax処理後に動作するプログラム
> function ajaxReturn(request) {
> alert(request.responseText);
> }
> </script>
> </head>
>
> <body>
> クリックで非同期登録します。<br>
> 登録内容
> <input id="input_text" type="text"><br>
> <input type="button" value="クリック" onclick="ajax_input()"><br>
> </body>
> </html>
>
> ユーザーから入力された情報をMySQLに登録して、結果をアラートしています。
>
>
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
========================================================================
久保哲朗 KUBO Tetsuro <kubo @ calico.co.jp>
PHP-users メーリングリストの案内