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

GET関数?の文字化けについてです。

created: 2003-12-08 01:05 | modified: 2004-01-02 02:13 | reply: 16

[1135] GET関数?の文字化けについてです。

user: 初心者ですみません。 | created: 2003-12-08 01:05
FLASHとPHPとmySQLを使って色々やってみてるんですけど、GET関数?を使って、名前をデータベースに格納しようとすると、文字化けがおこってしまいます。もし、その原因がわかる人がいましたらよろしくお願いします。すみません。ちなみにプログラムはこんな感じです。

<?php
mysql_connect("localhost", "", "");
mysql_selectdb("flash");
$nickname = $HTTP_GET_VARS["nickname"];
$score = $HTTP_GET_VARS["score"];
mysql_query("INSERT INTO ranking VALUES('$nickname', $score)");


print("ok");
?>
reply: 1136 返信 編集 削除

[1136] 文字コードは何でしょう?

user: hamaji | created: 2003-12-08 02:00
>名前をデータベースに格納しようとすると、文字化けがおこってしまいます。
それは何をどうしたときでしょうか?
1.ブラウザに表示させたとき?
2.コマンドラインからMySQLのデータを見たとき?

文字コードは何を使っているのでしょう?
1.MySQLの文字コード
2.HTMLの文字コード
※<meta http-equiv="Content-Type" content="text/html; Charset=○○○">
のCharset=○○○の部分。
3.PHPのエンコード

それと
>$nickname = $HTTP_GET_VARS["nickname"];
>$score = $HTTP_GET_VARS["score"];
のところですが、
お使いのPHPのバージョンは何でしょう?
$HTTP_GET_VARSは現在、非推奨の変数です。
$_GET['変数名']もしくは、$_POST['変数名']を使いましょう。

文面からはいつ、何を、どうした時に文字化けが起こるのかわからないですが、
FLASHを使うならShift_JISのみとなるはずです。
FLASHはShift_JISとUTF-8しかサポートしていなかったはずです。

#追記
#FLASHはShift_JISのみですね
http://village.infoweb.ne.jp/~ginga/flashhelper/flash5/charcode.html
Parent: 1135  reply: 1137 返信 編集 削除

[1137] お答えいただきありがとうございます。

user: 初心者ですみません。 | created: 2003-12-08 16:30
コマンドプロンプトって言うんですかね?
それで、mySQLのデータを見たときに、文字化けが起こってしまいます。
Charset=○○○の部分はSHIFT_JISになっていました。
PHPのバージョンは4.2.2です。
Parent: 1136  reply: 1138 返信 編集 削除

[1138] 肝心のデータベースの文字コードは何でしょう?

user: hamaji | created: 2003-12-08 18:22
> コマンドプロンプトって言うんですかね?
> それで、mySQLのデータを見たときに、文字化けが起こってしまいます。
ということはMySQLの文字コードとスクリプトの文字コードが違うことになりますね。
で、肝心のMySQLの文字コードは何を使っているのでしょうか?
my.iniにはどういう設定をしたのでしょうか?
環境が一切わかりません。自分の環境を書くのは、最低限必須です。

> PHPのバージョンは4.2.2です。
もしかしてFOXServとかいうやつでは?
だとしたらregister_globalsはonですね。

MySQLの文字コードの調べ方ですが、
プロンプトからなら、
C:> cd c:\mysql\bin
c:\mysql\bin> mysql -u ユーザ名 -p パスワード
でログイン。
mysql >status
とコマンドを打つと
キャラクターセットが見れます。

Winmysqladminからなら
my.ini Setupというタブを開き、my.iniの状態が見れます。

直でmy.iniの内容を見るならC:\WINDOWS\my.ini(または、C:\WINNT\my.iniなど)

もしかして、my.iniは一切編集してないとかですか?

とりあえず、my.iniの設定内容を教えてください。
Parent: 1137  reply: 1139 返信 編集 削除

[1139] 礼儀知らずですみません。

user: 初心者ですみません。 | created: 2003-12-08 19:34
失礼しました。そうですFoxservを使っています。register_globalsはonです。
それで、my.iniの内容は
#This File was made using the WinMySQLAdmin 1.3 Tool
#2003/12/07 23:06:28

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=C:/FoxServ/mysql

datadir=C:/FoxServ/mysql/data
#language=C:/FoxServ/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M

default-character-set=sjis

[mysql]
default-character-set=sjis
[WinMySQLadmin]
Server=C:/FoxServ/mysql/bin/mysqld-nt.exe
です。
環境のほうは、
WindowsXP
mysql1.0.0.0
です。
my.iniの設定ですが
default-character-set=sjis
[mysql]
default-character-set=sjis
この3行を書きました。
Parent: 1138  reply: 1140 返信 編集 削除

[1140] 根本的に。。。

user: hamaji | created: 2003-12-08 21:14
my.iniの件は了解です。
sjisに設定されているようですが。
#追記
#WinMySQLAdminの「Variables」のcharacter_setは、sjisになっていますか?
#なっていなかったら、my.ini Setupで再度変更して、
#SaveModificationを行って、再起動してください。

これで文字化けするならShift_JIS以外の文字コードで保存してませんか?

MS-DOS自体はもちろんShift_JISなので、たとえMySQLの文字コードがEUC-JP等だったとしても、
Shift_JISのコードで保存されていれば、ちゃんと読めるはずです。
(ハズしてたらごめんなさい。)

それと
>環境のほうは、
>WindowsXP
>mysql1.0.0.0
mysql1.0.0.0ってホントですか?
FOXServの最新パッケージには3.2x系が入ってたはず。

もし本当にmysql1.0.0.0なら日本語パッチを当てる必要があると思います。

そもそもFOXServに入っているPHPのバージョン等も古いので、(おまけにマルチバイト関連の関数はバグバグです。)
私ならアンインストールして、最新版を個別にインストールし直しますね。
(Apache、MySQL、PHP全部です。)

そういう方向も考えてみてはいかがでしょう?

とりあえず、スクリプト側でShift_JIS以外で保存するようにしてないですか?
Parent: 1139  reply: 1141 返信 編集 削除

[1141] 気になったこと

user: hamaji | created: 2003-12-08 21:31
>[1135] GET関数?の文字化けについてです。
のスクリプトですが、

>mysql_connect("localhost", "", "");
なぜユーザー名なし?
それとなぜコネクションIDを変数に格納しないのでしょう?

>mysql_selectdb("flash");
できれば、第2引数にコネクションIDをつけましょう。(というよりもつけるようにしてください。)

>mysql_query("INSERT INTO ranking VALUES('$nickname', $score)");
↑これも第2引数にコネクションIDがないです。

もう一度MySQL関連のマニュアルを見直したほうがよさそうです。
http://jp2.php.net/manual/ja/function.mysql-connect.php
http://jp2.php.net/manual/ja/function.mysql-select-db.php
http://jp2.php.net/manual/ja/function.mysql-query.php
Parent: 1140  reply: 1142 返信 編集 削除

[1142] 返事遅れました。

user: 初心者ですみません。 | created: 2003-12-11 12:45
ありがとうございます。
早速勉強しなおします。
Parent: 1141  reply: 1146 返信 編集 削除

[1146] やぱりだめでした。

user: 初心者ですみません。 | created: 2003-12-12 17:28
個別にインストールしましたがだめでした。
mysql_query("INSERT INTO ranking VALUES('日本語', $score)");
だと、ちゃんと表示されるんですけど・・。
あと、スクリプトもサクラエディタというので調べましたが、SJISでした。

環境
PHP4.3.4
mySQL4.0.16
Parent: 1142  reply: 1147 返信 編集 削除

[1147] エンコードがおかしいのでは?

user: hamaji | created: 2003-12-12 19:24
>mysql_query("INSERT INTO ranking VALUES('日本語', $score)");
>だと、ちゃんと表示されるんですけど・・。
だとしたらエンコードがおかしいのではないでしょうか?

>あと、スクリプトもサクラエディタというので調べましたが、SJISでした。
いや、スクリプト自体じゃなくてMySQLに保存する際の文字コード(スクリプトに渡される文字列)という意味で言ったつもりで、
言い方が悪かったかも知れませんね。すいません。

>$nickname = $HTTP_GET_VARS["nickname"];
>$score = $HTTP_GET_VARS["score"];
>mysql_query("INSERT INTO ranking VALUES('$nickname', $score)");
これってエンコードかけてますか?

GETで英数文字以外を渡すときはurlencode()、urldecode()を使いましょう。
http://www.php.net/manual/ja/function.urlencode.php
http://www.php.net/manual/ja/function.urldecode.php
バージョンアップしたのであれば$_HTTP_GET_VARSは使いません。
例1)HTMLのフォーム
<a href="xxxx.php?nickname=<?php echo urlencode("ここは日本語") ?>&score=9999">サンプル</a>

例2)PHP(受け取り側)
$nickname = urldecode($_GET["nickname"]);
$score = $_GET["score"];
mysql_query("INSERT INTO ranking VALUES('$nickname', $score)");

あとはphp.iniの[mbstring]にどのような設定をされたのでしょうか?
mbstring.internal_encodingや、
mbstring.http-input、mbstring.http_output等々

#追記
#FLASHから値を渡そうとしているのでしょうか?
#FLASH(ActionScript)ならescape()関数を使うようですが。
#escape( String )
#説明
#
#関数; パラメータをストリングに変換し、URL エンコードします。
#この場合、英数字以外のすべての文字は % が付いた
# 16 進シーケンスでエスケープされます。
Parent: 1146  reply: 1173 返信 編集 削除

[1173] FLASHからです

user: 初心者ですみません。 | created: 2003-12-16 20:14
FLASHから値を渡そうとしています。
そして、[mbstring]は設定していないです。
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
になっています。
Parent: 1147  reply: 1174 返信 編集 削除

[1174] Re.FLASHからです

user: hamaji | created: 2003-12-16 22:19
失礼ですが、答えになってないように思います。

> FLASHから値を渡そうとしています。
どのように値を渡したのでしょうか?
[1147]で私が書いたActionScriptの、escape()関数は使っているのでしょうか?
使っていないのでしょうか?

> そして、[mbstring]は設定していないです。
> ;mbstring.internal_encoding = EUC-JP
> ;mbstring.http_input = auto
> ;mbstring.http_output = SJIS
> になっています。
どうせなら『mbstring』とつくものすべて挙げてほしいものです。コピー&ペーストなら手間は一緒ですから。

私があなたのスクリプトを書いているわけではないので、
あなたのされていることは、一切わかりません。

こういう場では言葉のみでのコミュニケーションになりますので、
第3者に伝わるように工夫しましょう。

FLASH側の処理に問題があるように思いますが。
FLASHから受け取った値をechoなどで表示してちゃんと表示されますか?

#追記
#何のために、何がしたくて、何を実現するために、どういうスクリプトを書いて、
#その結果どうなって、どういう対処をしたのか。
#また自分でどう思っていて、どういう答えを望んでいるのか
#を明確にしないと解決までは遠回りするだけですよ。

#べつに嫌がらせで言っているわけじゃないので気を悪くしないでくださいね。
#文字のみでのやりとりになりますので、一度ゆっくり時間をかけて整理して、わかりやすいように伝わる努力をしましょう。
Parent: 1173  reply: 1175 返信 編集 削除

[1175] 気をつけます。

user: 初心者ですみません。 | created: 2003-12-17 01:08
FLASHでゲームのスコア入力の画面(名前と得点を入力)を作って、そのデータをPHPでmySQLに登録しようとしています。CQ出版社のActionScript開発テクニックという本を購入し、そのとおりにやっていますが、入力したデータをコマンドプロンプトで見ると、文字化けを起こしてしまいます。
いろいろアドバイスをしてもらっていますが、初心者ということもあって、よくわかりません。自分なりに努力はしてるつもりです。

ActionScriptの、escape()関数は使っているのでしょうか?についてですが、
escape()関数は使っていません。
FLASHから受け取った値をechoなどで表示してちゃんと表示されますか?
についてですが、これはいまからやってみます。
mbstringについてですが、下のようになっています。
[mbstring]
; language for internal character representation.
;mbstring.language = Japanese

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
;mbstring.internal_encoding = EUC-JP

; http input encoding.
;mbstring.http_input = auto

; http output encoding. mb_output_handler must be
; registered as output buffer to function
;mbstring.http_output = SJIS

; enable automatic encoding translation accoding to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
;mbstring.encoding_translation = Off

; automatic encoding detection order.
; auto means
;mbstring.detect_order = auto

; substitute_character used when character cannot be converted
; one from another
;mbstring.substitute_character = none;

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
;mbstring.func_overload = 0

文字化けをどうにかしたいので、もしわかる方がいましたらよろしくお願いします。
Parent: 1174  reply: 1176 返信 編集 削除

[1176] mbstringについて

user: hamaji | created: 2003-12-18 00:44
こんばんは。
先日はちょっと言葉が過ぎたようで、失礼しました。

mbstringについてですが、ちょっと設定を変えてみてトライしてもらえますか。

php.iniの106行目あたり
; You can redirect all of the output of your scripts to a function.  For



;output_handler =
これを
output_handler = mb_output_handler
↑『;』をはずし、『mb_output_handler』と設定する。

556行目あたり。
;extension=php_mbstring.dll
これを
extension=php_mbstring.dll
↑『;』をはずす。
ま、これはmb_○○()関数を使うときに有効にするものなのでエンコードとは関係なかったと思いますが、
今後のためセミコロンをはずします。

1038行目あたり
; language for internal character representation.
;mbstring.language = Japanese
これを
; language for internal character representation.
mbstring.language = Japanese
↑ここの『;』をはずし、『Japanese』を有効にする

1058行目あたり
; enable automatic encoding translation accoding to 



; portable libs/applications.
;mbstring.encoding_translation = Off
これを
mbstring.encoding_translation = On
↑ここの『;』をはずし、Offを『On』に変更する。

変更後、php.iniを上書き保存し、Webサーバーを再起動し、再度トライしてみてください。

それと
>FLASHから受け取った値をechoなどで表示してちゃんと表示されますか?
>についてですが、これはいまからやってみます。
これについても結果を教えてください。

ここもぜひ読んでください。
http://jp2.php.net/manual/ja/ref.mbstring.php
Parent: 1175  reply: 1177 返信 編集 削除

[1177] FLASHで受け取った値の表示について

user: 初心者ですみません。 | created: 2003-12-18 21:56
>先日はちょっと言葉が過ぎたようで、失礼>しました。
わざわざありがとうございます。私のほうが失礼でした。すいませんです。

上のほうとは別に、簡単なプログラムを書いて試してみました。
FLASHから受け取った値を、printで表示させると、文字化けが起こりました。(SJIS)
表示→エンコード→UTF-8
にすると、ちゃんと表示されました。
Parent: 1176  reply: 1178 返信 編集 削除

[1178] できました!!ありがとうございました!!

user: 初心者ですみません。 | created: 2003-12-18 23:06
$nickname = mb_convert_encoding($nickname,"SJIS","UTF-8");
を付け加えるとできました!!
hamajiさん、生意気な私に親切に教えてくださいまして、ありがとうございました。
とても感謝しています。
ほんとにお世話になりました!!
Parent: 1177  reply: 1202 返信 編集 削除

[1202] flash -> phpについて

user: うじまん | created: 2004-01-02 02:13
初心者ですみませんさんへ
すこし、おしえてください、
現在、私どもは、flashで読みの速さを測定するソフトをつくって、その結果をどうにかしてPHPかjavascriptに受け渡したいと考えています。
初心者ですみませんさんは、phpへ受け渡しておられるようですが、その方法について、少し詳しく教えて頂けないでしょうか?もし関連のURLがあればそれをおしえていただいたので助かります。探していますがうまく見つからずこのページにたどり着きました。
Parent: 1178  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 705 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

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