コードをGB 2312からUTF-8に変換する方法のまとめ(フロント、プログラム、データベース)
一つのウェブサイトが国際化が必要なら、コードをGB 2312からUTF-8に変える必要があります。その中に多くの問題があります。
主に5つの方面があります。
一.HTMLページのUTF-8の符号化問題
二.PHPページのUTF-8符号化問題
三.MYSQLデータベースはUTF-8を使ってエンコードされた問題
四.JS関連のUTF-8符号化問題
五.FLASH関連のUTF-8符号化問題
一.HTMLページのUTF-8の符号化問題
1.後ろに中国語の文字があると、表示されるタイトルは文字化けの可能性があります。
2.ファイルのエンコーディング問題:
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
3.HTMLファイルヘッダBOM問題:
ファイルを他のコードからUTF-8コードに変換すると、ファイルの最初にBOMタグを付けて、BOMタグをつけると、ブラウザが中国語を表示している間に文字化けが発生する場合があります。
このBOMラベルを削除する方法:
1.Dreamweaverでファイルを開けて再保存することができます。すなわち、BOMタグを削除することができます。
2.EditPlusでファイルを開くことができ、メニュー「オプション」->「ファイル」-「UTF-8タグ」で、「常に署名を削除する」と設定して、ファイルを保存します。すなわち、BOMタグを取り除くことができます。
4.WEBサーバUTF-8符号化問題:
上記の手順でやったら、やはり中国語の文字化けの問題があります。ご使用のWEBサーバのコードを確認してください。
Apacheを使用する場合は、設定ファイルの中のcharsetを、utf-8として設定してください。具体的なフォーマットはapachのプロファイルを参照してください。
もしあなたがNginnxを使ったら、inx.comの中のcharsetをutf-8に設定してください。具体的には「charset gb 2312」を見つけます。または類似の語句を「charset utf-8」に変更します。
二.PHPページのUTF-8符号化問題
1.コードの先頭に行を追加する:
header(「Contentt-Type:text/」)charset=utf-8");
2.PHPファイルの符号化問題
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
3.PHPファイルヘッドBOM問題:
PHPファイルは必ずBOMラベルがあってはいけません。そうでないと、sessionが使えない場合があります。
Warning:session_start()[functions.session-start]:Canot send session cache limiter-headers already sent
これは、セッションを実行しているからです。start()の場合は、全ページで出力はできませんが、PHPページにBOMタグがあり、PHPはこのBOMラベルを出力として認識していますので、エラーが発生しました。
PHPページは必ずBOMラベルを削除します。
このBOMラベルを削除する方法:
1.Dreamweaverでファイルを開けて再保存することができます。すなわち、BOMタグを削除することができます。
2.EditPlusでファイルを開くことができ、メニュー「オプション」->「ファイル」-「UTF-8タグ」で、「常に署名を削除する」と設定して、ファイルを保存します。すなわち、BOMタグを取り除くことができます。
4.PHPが添付の形式でファイルを保存する場合、UTF-8は符号化されます。
PHPはファイルを添付ファイルとして保存しています。ファイル名はGB 2312コードでなければいけません。もしファイル名に中国語があれば、文字化けが表示されます。
PHP自体がUTF-8符号化フォーマットのファイルであれば、ファイル名変数をUTF-8からGB 2312に変更する必要があります。
iconv(「UTF-8」、「GB 2312」、「filename」);
5.文章のタイトルを表示する際に文字化けや文字化けが発生しますか?疑問符の問題:
一般的に文章のタイトルが長い場合、一部のタイトルが表示されます。文章のタイトルはカットされます。一つのUTF-8の符号化形式の中国語文字は3文字の幅を占めます。タイトルを切り取る時、一つの中国語文字の1文字または2文字の幅だけ切り取ります。完全に切り取られていないと、文字化けや文字化けが発生します。疑問符の場合、以下の関数でタイトルを切り取れば大丈夫です。
1.phpmyadminでデータベースとデータテーブルを作成する
データベースを作成するときは、「整理」を「utf 8_」に設定してください。general.ci」または実行文:
CREATE DATABASE`dbname`DEFALT CHARACT SET utf 8 COLLATE utf 8_general.ci;
データテーブルを作成する場合:このフィールドが中国語で保存されている場合は、「整理」を「utf 8_」に設定する必要があります。general.ci「ci」
このフィールドが英語または数字を保存する場合は、デフォルトでOKです。
対応するSQL文、例えば:
データベースに接続した後:
$connection=mysql_connect($host_)name、$host_user、ホストパス
2行を追加:
mysqlquery(「set character set'utf 8'」)//ライブラリを読む
mysqlquery(「set names'utf 8'」)//書庫
MYSQLデータベースを正常に読み書きできます。
四.JS関連のUTF-8符号化問題
1.JS Cookieの中国語の文字化け問題を読みます。
PHPがクッキーを書く時には中国語の文字をescape符号化する必要があります。そうでないとJSがクッキーに読む中国語の文字は文字化けです。
しかし、php自体にはescape関数がありません。新しくescape関数を書きます。
2.外部JSファイルUTF-8符号化問題
HTMLページまたはPHPページに外部のJSファイルが含まれている場合、HTMLページまたはPHPページがUTF-8符号化フォーマットのファイルである場合、外部のJSファイルも同様にUTF-8のファイルに転送します。そうでないと、成功していません。関数を呼び出す時に反応しない場合があります。
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
五.FLASH関連のUTF-8符号化問題
FLASH内部はすべての文字列に対して、デフォルトはUTF-8で処理されます。
1.FLASH普通本ファイル(txt,)
テキストファイルのコードをUTF-8として保存する
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
2.FLASH XMLファイルを読む
XMLファイルのコードをUTF-8として保存します。
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
XML第1行に書き込み:
<?xml version=「1.0」encoding=「utf-8」?
3.FLASHはPHPを読んでデータを返します。
PHPコード自体がUTF-8なら、直接echoでいいです。
PHPコード自体がGB 2312のものであれば、PHPをUTF-8の符号化形式のファイルに転送して、直接echoすればいいです。
PHP符号化自体がGB 2312であり、ファイルの符号化フォーマットを変更することができない場合、以下の文で文字列をUTF-8の符号化フォーマットに変換します。
$new_str=iconv(「GB 2312」、「UTF-8」、「str」);
もっとechoでいいです
4.FLASHデータベース(MYSQL)のデータを読みます。
FLASHはPHPでデータベースのデータを読み取るためにはPHP自体の符号化は重要ではなく、データベースの符号化がGB 2312の場合は、下記の文で文字列をUTF-8の符号化フォーマットに変換する必要があります。
$new_str=iconv(「GB 2312」、「UTF-8」、「str」);
5.FLASHはPHPでデータを書きます。
FLASHから送られてきた文字列はUTF-8形式で、それに応じた符号化フォーマットに変換され、また操作(ファイルを書き込み、データベースを書き、直接表示など)されますか?それともiconv関数で変換されますか?
6.FLASHはローカルコードを使用する(理論的には推奨されない)
FLASHにUTF-8コードを使わずにローカルコードを使用したい場合。中国大陸地域にとって、ローカルコードはGB 2312またはGBKです。
ASプログラムには、下記のコードを追加できます。
System.use Codepage=true;
FLASH内のすべての文字はGB 2312を使用して符号化され、すべてFLASHに導入されたデータまたはFLASHから導出されたデータは、それぞれの符号化変換を行うべきである。
ローカルコードを使用すると、繁体字中国語エリアのユーザーが文字化けしてしまうため、使用を推奨しません。
主に5つの方面があります。
一.HTMLページのUTF-8の符号化問題
二.PHPページのUTF-8符号化問題
三.MYSQLデータベースはUTF-8を使ってエンコードされた問題
四.JS関連のUTF-8符号化問題
五.FLASH関連のUTF-8符号化問題
一.HTMLページのUTF-8の符号化問題
1.後ろに中国語の文字があると、表示されるタイトルは文字化けの可能性があります。
2.ファイルのエンコーディング問題:
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
3.HTMLファイルヘッダBOM問題:
ファイルを他のコードからUTF-8コードに変換すると、ファイルの最初にBOMタグを付けて、BOMタグをつけると、ブラウザが中国語を表示している間に文字化けが発生する場合があります。
このBOMラベルを削除する方法:
1.Dreamweaverでファイルを開けて再保存することができます。すなわち、BOMタグを削除することができます。
2.EditPlusでファイルを開くことができ、メニュー「オプション」->「ファイル」-「UTF-8タグ」で、「常に署名を削除する」と設定して、ファイルを保存します。すなわち、BOMタグを取り除くことができます。
4.WEBサーバUTF-8符号化問題:
上記の手順でやったら、やはり中国語の文字化けの問題があります。ご使用のWEBサーバのコードを確認してください。
Apacheを使用する場合は、設定ファイルの中のcharsetを、utf-8として設定してください。具体的なフォーマットはapachのプロファイルを参照してください。
もしあなたがNginnxを使ったら、inx.comの中のcharsetをutf-8に設定してください。具体的には「charset gb 2312」を見つけます。または類似の語句を「charset utf-8」に変更します。
二.PHPページのUTF-8符号化問題
1.コードの先頭に行を追加する:
header(「Contentt-Type:text/」)charset=utf-8");
2.PHPファイルの符号化問題
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
3.PHPファイルヘッドBOM問題:
PHPファイルは必ずBOMラベルがあってはいけません。そうでないと、sessionが使えない場合があります。
Warning:session_start()[functions.session-start]:Canot send session cache limiter-headers already sent
これは、セッションを実行しているからです。start()の場合は、全ページで出力はできませんが、PHPページにBOMタグがあり、PHPはこのBOMラベルを出力として認識していますので、エラーが発生しました。
PHPページは必ずBOMラベルを削除します。
このBOMラベルを削除する方法:
1.Dreamweaverでファイルを開けて再保存することができます。すなわち、BOMタグを削除することができます。
2.EditPlusでファイルを開くことができ、メニュー「オプション」->「ファイル」-「UTF-8タグ」で、「常に署名を削除する」と設定して、ファイルを保存します。すなわち、BOMタグを取り除くことができます。
4.PHPが添付の形式でファイルを保存する場合、UTF-8は符号化されます。
PHPはファイルを添付ファイルとして保存しています。ファイル名はGB 2312コードでなければいけません。もしファイル名に中国語があれば、文字化けが表示されます。
PHP自体がUTF-8符号化フォーマットのファイルであれば、ファイル名変数をUTF-8からGB 2312に変更する必要があります。
iconv(「UTF-8」、「GB 2312」、「filename」);
5.文章のタイトルを表示する際に文字化けや文字化けが発生しますか?疑問符の問題:
一般的に文章のタイトルが長い場合、一部のタイトルが表示されます。文章のタイトルはカットされます。一つのUTF-8の符号化形式の中国語文字は3文字の幅を占めます。タイトルを切り取る時、一つの中国語文字の1文字または2文字の幅だけ切り取ります。完全に切り取られていないと、文字化けや文字化けが発生します。疑問符の場合、以下の関数でタイトルを切り取れば大丈夫です。
function get_brief_str($str, $max_length)
{
echo strlen($str) ."
";
if(strlen($str) > $max_length)
{
$check_num = 0;
for($i=0; $i < $max_length; $i++)
{
if (ord($str[$i]) > 128)
$check_num++;
}
if($check_num % 3 == 0)
$str = substr($str, 0, $max_length)."...";
else if($check_num % 3 == 1)
$str = substr($str, 0, $max_length + 2)."...";
else if($check_num % 3 == 2)
$str = substr($str, 0, $max_length + 1)."...";
}
return $str;
}
三.MYSQLデータベースはUTF-8を使ってエンコードされた問題1.phpmyadminでデータベースとデータテーブルを作成する
データベースを作成するときは、「整理」を「utf 8_」に設定してください。general.ci」または実行文:
CREATE DATABASE`dbname`DEFALT CHARACT SET utf 8 COLLATE utf 8_general.ci;
データテーブルを作成する場合:このフィールドが中国語で保存されている場合は、「整理」を「utf 8_」に設定する必要があります。general.ci「ci」
このフィールドが英語または数字を保存する場合は、デフォルトでOKです。
対応するSQL文、例えば:
CREATE TABLE `test` (
`id` INT NOT NULL ,
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;
2.PHPでデータベースを読み書きます。データベースに接続した後:
$connection=mysql_connect($host_)name、$host_user、ホストパス
2行を追加:
mysqlquery(「set character set'utf 8'」)//ライブラリを読む
mysqlquery(「set names'utf 8'」)//書庫
MYSQLデータベースを正常に読み書きできます。
四.JS関連のUTF-8符号化問題
1.JS Cookieの中国語の文字化け問題を読みます。
PHPがクッキーを書く時には中国語の文字をescape符号化する必要があります。そうでないとJSがクッキーに読む中国語の文字は文字化けです。
しかし、php自体にはescape関数がありません。新しくescape関数を書きます。
function escape($str)
{
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(ord($v[0]) < 128)
$ar[$k] = rawurlencode($v);
else
$ar[$k] = "%u".bin2hex(iconv("UTF-8","UCS-2",$v));
}
return join("",$ar);
}
JSはcookieを読む時、unescapeで復号して、cookieの中に中国語の文字化けがある問題を解決しました。2.外部JSファイルUTF-8符号化問題
HTMLページまたはPHPページに外部のJSファイルが含まれている場合、HTMLページまたはPHPページがUTF-8符号化フォーマットのファイルである場合、外部のJSファイルも同様にUTF-8のファイルに転送します。そうでないと、成功していません。関数を呼び出す時に反応しない場合があります。
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
五.FLASH関連のUTF-8符号化問題
FLASH内部はすべての文字列に対して、デフォルトはUTF-8で処理されます。
1.FLASH普通本ファイル(txt,)
テキストファイルのコードをUTF-8として保存する
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
2.FLASH XMLファイルを読む
XMLファイルのコードをUTF-8として保存します。
エディタのメニューをクリックしてください。「ファイル」->「名前を付けて保存」してください。現在のファイルのコードが見えます。ファイルコードがUTF-8であることを確認してください。ANSIであれば、コードをUTF-8に変更する必要があります。
XML第1行に書き込み:
<?xml version=「1.0」encoding=「utf-8」?
3.FLASHはPHPを読んでデータを返します。
PHPコード自体がUTF-8なら、直接echoでいいです。
PHPコード自体がGB 2312のものであれば、PHPをUTF-8の符号化形式のファイルに転送して、直接echoすればいいです。
PHP符号化自体がGB 2312であり、ファイルの符号化フォーマットを変更することができない場合、以下の文で文字列をUTF-8の符号化フォーマットに変換します。
$new_str=iconv(「GB 2312」、「UTF-8」、「str」);
もっとechoでいいです
4.FLASHデータベース(MYSQL)のデータを読みます。
FLASHはPHPでデータベースのデータを読み取るためにはPHP自体の符号化は重要ではなく、データベースの符号化がGB 2312の場合は、下記の文で文字列をUTF-8の符号化フォーマットに変換する必要があります。
$new_str=iconv(「GB 2312」、「UTF-8」、「str」);
5.FLASHはPHPでデータを書きます。
FLASHから送られてきた文字列はUTF-8形式で、それに応じた符号化フォーマットに変換され、また操作(ファイルを書き込み、データベースを書き、直接表示など)されますか?それともiconv関数で変換されますか?
6.FLASHはローカルコードを使用する(理論的には推奨されない)
FLASHにUTF-8コードを使わずにローカルコードを使用したい場合。中国大陸地域にとって、ローカルコードはGB 2312またはGBKです。
ASプログラムには、下記のコードを追加できます。
System.use Codepage=true;
FLASH内のすべての文字はGB 2312を使用して符号化され、すべてFLASHに導入されたデータまたはFLASHから導出されたデータは、それぞれの符号化変換を行うべきである。
ローカルコードを使用すると、繁体字中国語エリアのユーザーが文字化けしてしまうため、使用を推奨しません。