ホームページ  >  記事  >  バックエンド開発  >  PHPのコード化け問題、UTF-8(コード化け)_PHPチュートリアル

PHPのコード化け問題、UTF-8(コード化け)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:50:12850ブラウズ

1. HTML ページを UTF-8 エンコードに変換する問題
1. 見出しの後、タイトルの前に次の行を追加します:

順序が間違ってはいけません、必ず
に入っているはずです 表示されるタイトルが文字化けしている可能性があります!
2.html ファイルのエンコードの問題:
エディターのメニューをクリックします: [ファイル] -> [名前を付けて保存]、現在のファイルのエンコーディングが表示されます。ファイル エンコーディングが UTF-8、
であることを確認します。 ANSI の場合、エンコードを UTF-8 に変更する必要があります。
3.HTML ファイルヘッダーの BOM の問題:
ファイルを他のエンコードから UTF-8 エンコードに変換すると、ファイルの先頭に BOM タグが追加されることがあります。
BOM タグにより、ブラウザで中国語を表示すると文字化けが発生する場合があります。
この BOM タグを削除する方法:
1. Dreamweaver でファイルを開いて再保存すると、BOM タグを削除できます。
2. EditPlus でファイルを開き、メニューの「環境設定」->「ファイル」->「UTF-8 ID」で、「署名を常に削除する」に設定します。 ファイルを保存すると、BOM タグを削除できます。
4.WEBサーバーのUTF-8エンコーディングの問題:
上記の手順に従っても中国語の文字化けの問題が解決しない場合は、
ご利用のWEBサーバーのエンコードの問題をご確認ください
Apache を使用している場合は、設定ファイルの文字セットを utf-8 に設定してください (ここにはメソッドのみがリストされています。特定の形式については、Apache 設定ファイルを参照してください)
Nginx を使用している場合は、nginx.conf の文字セットを utf-8 に設定してください。
具体的には、「charset gb2312;」または同様のステートメントを見つけて、「charset utf-8;」に変更します。
2. PHP ページを UTF-8 エンコードに変換する際の問題
1. コードの先頭に次の行を追加します:
header("Content-Type: text/html;charset=utf-8");
2.PHPファイルのエンコードの問題
エディターのメニューをクリックします: [ファイル] -> [名前を付けて保存]、現在のファイルのエンコーディングが表示されます。ファイル エンコーディングが UTF-8、
であることを確認します。 ANSI の場合、エンコードを UTF-8 に変更する必要があります。
3.PHP ファイルヘッダーの BOM 問題:
PHP ファイルには BOM タグがあってはなりません
そうしないと、セッションが使用できない状況が発生し、同様のプロンプトが表示されます:
警告: session_start() [function.session-start]: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されました
これは、 session_start() を実行するときにページ全体を出力することはできませんが、前の PHP ページに BOM タグが存在する場合、
PHP はこの BOM タグを出力とみなしたため、エラーが発生しました。
したがって、BOMタグをPHPページから削除する必要があります
この BOM タグを削除する方法:
1. Dreamweaver でファイルを開いて再保存すると、BOM タグを削除できます。
2. EditPlus でファイルを開き、メニューの「環境設定」->「ファイル」->「UTF-8 ID」で、「署名を常に削除する」に設定します。 ファイルを保存すると、BOM タグを削除できます。
4.PHP がファイルを添付ファイルとして保存するとき、UTF-8 エンコードの問題:
PHP はファイルを添付ファイルとして保存します。ファイル名は GB2312 でエンコードされている必要があります。
そうしないと、ファイル名に漢字が含まれる場合、文字化けが表示されます:
PHP 自体が UTF-8 エンコード形式のファイルの場合、
ファイル名変数は UTF-8 から GB2312 に変換する必要があります:
iconv("UTF-8", "GB2312", "$ファイル名");

5. 記事タイトルを切り詰めて表示すると文字化けや「?」が表示される 通常、記事タイトルが非常に長い場合、タイトルの一部が表示され、記事タイトルが切り詰められます。 UTF-8 エンコード形式の中国語文字は 3 文字の幅を占めるため、

タイトルをインターセプトするときに、漢字幅の 1 文字または 2 文字だけがインターセプトされる場合があります。

傍受が完了していない場合、文字化けや「?」が表示されます
次の関数を使用してタイトルをインターセプトすれば問題ありません:
関数 get_brief_str($str, $max_length)
{
echo strlen($str) ."
";
if(strlen($str) > $max_length)
{
$check_num = 0;
for($i=0; $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)."...";
}
$str;
を返します }
3. MYSQLデータベースでUTF-8エンコーディングを使用する場合の問題

1. phpmyadmin を使用してデータベースとデータテーブルを作成します
データベースを作成するときは、「組織」を「utf8_general_ci」に設定してください
またはステートメントを実行します:
データベース `dbname` のデフォルト文字セット utf8 を作成 utf8_general_ci;
を照合します データテーブルを作成するとき: フィールドに中国語が格納されている場合は、「組織」を「utf8_general_ci」に設定する必要があります:
フィールドに英語または数字が格納されている場合は、デフォルトで問題ありません。
対応する SQL ステートメント、例:
CREATE TABLE `テスト` (
`id` INT NOT NULL 、
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 、
主キー ( `id` )
) エンジン = ミサム ;
2. PHP を使用してデータベースを読み書きします
データベースに接続した後:
[隠す]$connection = mysql_connect($host_name, $host_user, $host_pass);
2 行を追加します:
mysql_query("setcharacter set 'utf8'");//ライブラリを読み込みます
mysql_query("set names 'utf8'");// ライブラリを書き込む
MYSQL データベースは通常どおり読み書きできます。


4. JS
に関連するUTF-8エンコーディングの問題 1.JSがCookieを読み込むと中国語が文字化けする問題

PHP で Cookie を記述する場合、中国語の文字をエスケープ エンコードする必要があります。
そうしないと、JS が読み込む Cookie 内の漢字が文字化けしてしまいます。
しかし、PHP 自体にはエスケープ関数がありません。新しいエスケープ関数を作成しましょう:
関数エスケープ($str)
{
preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(ord($v[0]) $ar[$k] = rawurlencode($v);
それ以外
$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 に変更する必要があります。
5. FLASH に関連する UTF-8 エンコードの問題
FLASH はデフォルトですべての文字列を内部で UTF-8 で処理します
1. FLASHはテキストファイル(txt、html)を読み込みます
テキスト ファイルのエンコードを UTF-8 として保存するには
エディターのメニューをクリックします: [ファイル] -> [名前を付けて保存] をクリックすると、現在のファイルのエンコーディングが表示されます。ファイル エンコーディングが UTF-8、
であることを確認します。 ANSI の場合、エンコードを UTF-8 に変更する必要があります。
2.FLASHはXMLファイルを読み込みます
XML ファイルのエンコーディングを UTF-8 として保存するには
エディターのメニューをクリックします: [ファイル] -> [名前を付けて保存] をクリックすると、現在のファイルのエンコーディングが表示されます。ファイル エンコーディングが UTF-8、
であることを確認します。 ANSI の場合、エンコードを UTF-8 に変更する必要があります。
XML の 1 行目に次のように書きます:

3.FLASHはPHPを読み込んでデータを返します

PHP エンコーディング自体が UTF-8 の場合は、それを直接エコーするだけです
PHP エンコード自体が GB2312 の場合、PHP を UTF-8 エンコード形式のファイルに転送し、それを直接エコーするだけです
PHP エンコード自体が GB2312 で、ファイルのエンコード形式の変更が許可されていない場合は、
次のステートメントを使用して、文字列を UTF-8 エンコード形式に変換します
$new_str = iconv("GB2312", "UTF-8", "$str");
もう一度エコーしてください
4.FLASHはデータベース(MYSQL)からデータを読み込みます
FLASH は PHP を通じてデータベース内のデータを読み取る必要があります
PHP 自体のエンコーディングは重要ではありません。重要なのは、データベースのエンコーディングが GB2312 であるかどうかです。
文字列を UTF-8 エンコード形式に変換するには、次のステートメントを使用する必要があります
$new_str = iconv("GB2312", "UTF-8", "$str");

5.FLASHはPHPを通じてデータを書き込みます
つまり、FLASH によって渡される文字列は UTF-8 形式です
対応するエンコード形式に変換してから操作 (ファイルの書き込み、データベースの書き込み、直接表示など)
または、iconv 関数を使用して変換します
6.FLASH はローカルエンコーディングを使用します (理論的には推奨されません)
FLASH で UTF-8 エンコーディングを使用せず、ローカル エンコーディングを使用したい場合
中国本土の場合、ローカル エンコーディングは GB2312 または GBK
AS プログラム内に次のコードを追加できます:
System.useCodepage = true;
その後、FLASH 内のすべての文字は GB2312 を使用してエンコードされます
FLASH にインポートまたはエクスポートされたすべてのデータは、対応するエンコード変換を受ける必要があります
ローカルエンコーディングを使用すると繁体字中国語地域のユーザーに文字化けが発生するため、使用はお勧めしません


Gua Xixi より抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478297.html技術記事 1. HTML ページを UTF-8 エンコーディングに変換する際の問題 1. ヘッダーの後とタイトルの前に次の行を追加します。タイトル...
を表示する必要があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。