ホームページ  >  記事  >  バックエンド開発  >  php_PHPチュートリアルの中国語文字化けの解決策

php_PHPチュートリアルの中国語文字化けの解決策

WBOY
WBOYオリジナル
2016-07-13 10:54:45903ブラウズ

PHPチュートリアルでの中国語の文字化けの解決策
最も厄介なのは、ajax post get で漢字が文字化けすることです

ajax を使用して中国語を送信すると、ff は非常に賢く、中国語の文字を 16 進数に自動的に変換しますが、BC の ie はそれを自分で処理する必要があります...-____!!

最も簡単な方法は、エスケープする必要がある場合に js の組み込み関数 encodeuricomponent を使用することです

追記 最初は、escape は漢字をエスケープするために使用されました


PHPのその他の文字化け解決策の分析
1. PHPファイル自体のエンコーディングとWebページのエンコーディングが一致している必要があります

a. gb2312 エンコーディングを使用したい場合、php はヘッダーを出力する必要があります: header("content-type: text/html; charset=gb2312")、静的ページを追加し、すべてのファイルのエンコーディング形式は ansi です。メモ帳で開き、名前を付けて保存できます。 エンコードを ansi として選択するには、ソース ファイルを上書きします。

b. utf-8 エンコーディングを使用したい場合、php はヘッダーを出力する必要があります: header("content-type: text/html; charset=utf-8")、静的ページ、およびすべてのエンコーディング形式を追加します。ファイルはutf-8です。 utf-8 として保存するのは少し面倒かもしれません。セッションを使用する場合は、editplus を使用して保存できます。パラメータの選択 -> ファイル -> UTF-8 署名、常に削除を選択し、保存して BOM 情報を削除します。

2. PHP 自体は Unicode ではないため、substr などのすべての関数を mb_substr に変更する必要があります (mbstring 拡張機能をインストールする必要があります)。または、iconv を使用してトランスコードできます。

2.phpとmysql間のデータ対話チュートリアル

PHP とデータベースのチュートリアルのコーディングは一貫している必要があります

1. mysql 設定ファイル my.ini または my.cnf を変更します。mysql には utf8 エンコーディングを使用するのが最適です。

[mysql]

デフォルト文字セット=utf8

[mysqld]

デフォルト文字セット=utf8

default-storage-engine=myisam

[mysqld] の下に追加します:

default-collat​​ion=utf8_bin

init_connect='utf8 の名前を設定'

2. データベース操作を実行する必要がある PHP プログラムの前に mysql_query("set names 'encoding'"); を追加します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは gb2312 です。 utf-8 の場合、mysql エンコーディングは utf8 なので、データの挿入または取得時に文字化けが発生しません

Three.phpはオペレーティングシステムに関連しています

WindowsとLinuxのエンコードが異なります。Windows環境では、PHP関数を呼び出す際にパラメータがUTF-8でエンコードされていると、move_uploaded_file()、filesize()、readfile()などのエラーが発生します。処理中です アップロードやダウンロード時によく使用されます。呼び出し時に次のエラーが発生する場合があります:

警告: move_uploaded_file()[function.move-uploaded-file]: ストリームを開けませんでした: ... の引数が無効です

警告: move_uploaded_file()[function.move-uploaded-file]:... で '' を '' に移動できません

警告: filesize() [function.filesize]: stat failed for ... in ...

警告: readfile() [function.readfile]: ストリームを開けませんでした: ..

の引数が無効です

Linux 環境で gb2312 エンコーディングを使用する場合、これらのエラーは発生しませんが、保存されたファイル名が文字化けし、ファイルを読み取ることができなくなります。この場合、まずパラメーターをオペレーティング システムが認識するエンコーディングに変換することができます。エンコード変換には、mb_convert_encoding (文字列、新しいエンコード、元のエンコード) または iconv (元のエンコード、新しいエンコード、文字列) を使用できます。これにより、処理後に保存されたファイル名が文字化けせず、ファイルを正常に読み込むことができます。中国語名のファイルのアップロードとダウンロード。

実際、より良い解決策があります。それはシステムから完全に分離することであり、システムのエンコーディングを考慮する必要はありません。ファイル名として文字と数字のみのシーケンスを生成し、データベースに漢字を含む元の名前を保存することができます。この方法では、ダウンロード時に move_uploaded_file() を呼び出すときに問題は発生しません。ファイル名を中国語の文字を含む元の名前に変更します。ダウンロードを実装するコードは以下の通りです

header("pragma: public");

header("有効期限: 0");

header("キャッシュコンポーネント: 必須再検証、事後チェック=0、事前チェック=0");

header("content-type: $file_type");

header("content-length: $file_size");

header("content-disposition:attachment; filename="$file_name"");

header("content-transfer-encoding: binary");

readfile($file_path);

$file_typeはファイルの種類、$file_nameは元の名前、$file_pathはサービス上に保存されたファイルのアドレスです

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632307.html技術記事 PHP チュートリアルでは、中国語の文字化けに対する最も一般的な解決策は、ajax を使用して中国語を送信すると、ff が非常に賢く、中国語の文字を 16 進数に変換します。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。