PHP文字化け問題、UTF-8文字化けよくある問題小結linux-windowsファイル符号化文字化け問題

5754 ワード

一.HTMLページ転送UTF-8符号化問題1.headの後、titleの前に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を使用している場合は、プロファイルの中の:charsetをutf-8に設定してください(ここでは方法のみを列挙します.具体的なフォーマットはapacheのプロファイルを参照してください).Nginxを使用している場合は、nginx.confの中の:charsetはutf-8に設定して、具体的に“charset gb 2312;”を見つけますまたは類似の文を「charset utf-8;」に変更します.二.PHPページ転送UTF-8符号化問題1.コードの開始に1行:header(「Content-Type:text/html;charset=utf-8」)を追加します.2.PHPファイル符号化問題エディタのメニューをクリックします:“ファイル”->「名前を付けて保存」、現在のファイルの符号化を見ることができて、ファイルの符号化が:UTF-8であることを確保して、ANSIならば、符号化を:UTF-8に変える必要があります.3.PHPファイルヘッダBOM問題:PHPファイルは必ずBOMタグを持ってはいけない.そうしないと、セッションが使用できない場合があり、同様のヒントがある:Warning:セッション_start()[function.session-start]:Cannot send session cache limiter-headers already sentこれは、session_start()の場合、ページ全体に出力はできませんが、前のPHPページにBOMタグが存在していたため、PHPはこのBOMタグを出力と見なしていたのでエラー!だからPHPページは必ずBOMタグを削除してこのBOMタグを削除する方法:1.Dreamweaverでファイルを開き、再保存することができます.BOMタグを削除できます.2.EditPlusでファイルを開き、メニューの「プリファレンス」->「ファイル」->「UTF-8 ID」で、「常に署名を削除」に設定してファイルを保存し、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文字の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`DEFAULT CHARACTER SET utf 8 COLLATE utf 8_に設定してくださいgeneral_ci; データテーブルを作成する場合:このフィールドが中国語を格納している場合は、「整理」を「utf 8_general_ci」に設定し、このフィールドが英語または数字を格納している場合はデフォルトでよい.対応する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でデータベースを読み書きするデータベース接続後:[hide]$connection=mysql_connect($host_name, $host_user, $host_pass); 2行追加:
 
    
mysql_query("set character set 'utf8'");//
mysql_query("set names 'utf8'");//

MYSQLデータベースを正常に読み書きできます.四.JSに関するUTF-8符号化問題1.JSがCookieの中国語の文字化けしを読む問題PHPがcookieを書く時中国語の文字をescape符号化する必要があって、さもなくばJSがcookieの中の中国語の文字を読むのは文字化けしです.しかし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でクッキーを読むとき、unescapeで復号し、クッキーに中国語の文字化けしの問題を解決します.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で処理する.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の場合、直接echoでいいですPHP符号化自体がGB 2312の場合、PHPをUTF-8符号化フォーマットのファイルに転送して保存することができます.直接echoでいいです.PHP符号化自体がGB 2312の場合、ファイルの符号化フォーマットを変更することは許されません.次の文で文字列をUTF-8の符号化フォーマット$new_に変換します.str = iconv("GB2312", "UTF-8", "$str"); あとechoでいいです.FLASH読み出しデータベース(MYSQL)のデータFLASHは、PHPを介してデータベース内のデータPHP自体の符号化を読み出すことは重要ではないが、データベースの符号化がGB 2312である場合、文字列をUTF-8の符号化フォーマット$new_に変換するには、次の文が必要であるstr = iconv("GB2312", "UTF-8", "$str"); 5.FLASHはPHPを通じてデータを書く一言で、FLASHから送られてきた文字列はUTF-8形式で、相応の符号化形式に変換するには、(ファイルを書く、データベースを書く、直接表示するなど)iconv関数で6を変換するかを操作する.FLASHがローカルコードを使用する(理論的には推奨されない)FLASHがUTF-8符号化を使用するのではなく、ローカルコードを使用するようにするには中国大陸部にとってローカルコードはGB 2312またはGBK ASプログラム内である、以下のコードを追加することができる:System.useCodepage = true; では、FLASH内のすべての文字はGB 2312のコードを使用してFLASHにインポートされたデータやFLASHからエクスポートされたデータをすべてコード変換する必要があります.ローカルコードを使用すると、繁体字中国語圏のユーザーが文字化けしてしまうため、使用を推奨しません.
転載先:https://www.cnblogs.com/shangbolei/p/4386505.html