(mysql_set_charset)PHPでINSERTした時の文字化け
現在、独学でPHPを弄っているのですが
文字化けが起こってしまい色々調べたのですが理解できていないのでこちらで質問させていただきます。
海外・日本向けのホームページを作成中で
日本向けのHTMLについては、
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
海外向けのHTMLについては、
<meta http-equiv="content-type" content="text/html; charset=utf-8">
と、設定。
データベースの設定は(全てを理解していないのでコピー)
MySQL:MySQL の文字セット: UTF-8 Unicode (utf8)
MySQL 接続の照合順序:utf8_general_ci
各テーブル照合順序:utf8_general_ci
各カラムは数値の部分のみ)int、文字列についてはvarchar、utf8_general_ciです。
PHPのver:5.2.14
(レンタルサーバーはsakuraインターネットです。)
そこで日本向けのHPからINSERTを行ったところ、
DB内を見ると文字が入っていない状態だったり、文字化け(イ.イイイ(適当))な感じになり
非常に苦戦しております。
私的思考では
『utf8のDBにutf8以外の文字コード(shift_jisやらeuc等)で書き込むから文字化けするのであって
書き込む時にutf8に変換してやれば良い。』と思っております。
(この時点で解釈が間違っているのであれば遠慮無くご指摘頂ければ幸いです。)
そこで色々調べてみたのですが
mysql_set_charset()関数を記述すると良いとの記事がありました。
ですがこの関数について解釈がままならず・・・(涙
例えばこの関数は
$link = my_mysql_connect($host, $user, $passwd)
$tmp = mysql_set_charset('sjis', $link);
utf8で書き込みをしたutf8の文字コード(データ)をsjisとして表示してくれる訳でしょうか?
簡単に言えば
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">と同様の意味でしょうか?
また、PHPからINSERTする時の変換についてはINSERT前に
mb_convert_encoding()
で変換しなければならないのでしょうか?
また、表示もそうですが
海外向け・日本語向けのHPを作成する際はDBを分割するべきなのでしょうか?
イタリア語やフランス語については「e」の頭に「`」の様な特殊文字がありますし・・・。
乱文で失礼致しました。
どなたかご教授頂ければ幸いです。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
すでにUTFで環境を構築されているならミドルウェア側で変換することをお勧めします。
多言語コードで格納されていると検索する際にヒットしなくなります。
また、SJISはインジェクションの問題が完全には対応できないためお勧めしません。
どうしてもというのであれば検索性をすててバイナリとしてデータを格納するだけを
目指すのも手かもしれません
この回答への補足
お早い返答有難う御座います。
またお伺いしたいのですが、
>すでにUTFで環境を構築されているなら・・・
とありますが、まだ始めたばかりですのでもし多言語に対応する環境があるのであれば
お教え頂ければそちらに切り替えようと思います。
その方が楽なのでorz
またミドルウェア側と言うのが少し私には難しいのですが(涙
http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%89% …
等、少し調べてみましたが
有力な情報があるサイトがありましたらご誘導お願いできませんでしょうか?(涙
厚かましいお願いで申し訳御座いません・・・
No.2
- 回答日時:
とりあえずまず、日本語もUTF-8で作成して、全部統一させることをおすすめします。
日本語だからといって、SJISにする理由はとくに無いと思います。
何か特殊な事情があるなら、データベースに挿入する前にmb_convert_encoding関数でSJISをUTF-8に変換してください。
尚、正確には、SJISではなくてsjis-winで。
<?php
$value = mb_convert_encoding($value, 'utf-8', 'sjis-win');//sjis-winは括弧株とか特殊な文字も変換できる。
?>
その上で、MySQLで作成したデータベースと、PHPの文字コードの他に、Mysqlの設定ファイルに書いてある(または書いてなくてデフォルトで決まっている)文字コードの存在があります。
その設定ファイルに記述されている文字コードが正しく、utf8になっていなければ、文字化けが起きます。
それをスクリプト(クライアント)側から決めてやるのが、mysql_set_charsetになります。
ですので、
<?php
mysql_set_charset('utf8', $link);
?>
としてやるのが正解。
のはずです。
一度試してみてください。
尚、私は、
http://www.klab.jp/media/mysql/index6.html
こちらのサイトを参考に致しました。
勉強を進めていくうちにきっと必要な文書となると思いますので、ブックマークしておくと良いかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php 入力画面から確認表示画面...
-
PHPでCSVを出力するさいに、ル...
-
ワードプレスサイト PHP8.0.25...
-
PHPを使って、別サイトの一部を...
-
PHP ページング データベース
-
Q&Aサイトを作成していてURLの...
-
PHPの構文で間違えが分からない
-
書籍とその書籍が提供している...
-
PHPとHTML+Xamppの掲示板で画像...
-
ファイルの書き込みについて教...
-
Postgresの特定のカラムからス...
-
htmlspecialcharsが機能してい...
-
【初心者】XAMPPのapacheの(恐...
-
プログラミング言語で、使える...
-
こちらはただの直列処理ですか?
-
PHPでこのコード自体に意味は無...
-
phpでPEAR::DBを使っているので...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
awsにApacheとPHPを入れて、何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EclEmmaレポートのエクスポート...
-
PHPで韓国語の表示がうまくいき...
-
文字コード変えたら、fopenでき...
-
PHPExcelバッファへの書き込み...
-
HTTPヘッダはメタタグにも記述...
-
Eclipseで文字化け
-
phpで動的タイトル
-
csvファイル出力時に文字化けし...
-
文字集合範囲外の文字とパーセ...
-
phpログファイルの文字化けにつ...
-
PHPで「®」や特殊文字のエスケープ
-
phpフォームで文字化け
-
Google Chromeで文字化け
-
Head First PHPサンプルコード...
-
自作cgiのページがIE10で文字化...
-
<meta charset="utf-8"><!-- 文...
-
php 文字化け
-
(mysql_set_charset)PHPでINSER...
-
発生した文字化けに対する対処
-
文字化けについて
おすすめ情報