はじめに:
正直に言うと、
サンダルもUTF8は良いことだと思っています...
結局のところ、中国、日本、韓国を同じスクリーンで見せることは、東アジア人にとって非常に魅力的です...
(もちろんメリットはこれだけではありませんが…)
Webプログラムだけではありません…
多くのアプリケーションのカーネルは Unicode エンコーディングを使用し始めています...
目的は明らかです。多言語表示をサポートすることです...
すべての Microsoft ソフトウェアは Unicode ベースです...
したがって、中国製XPでも日本のソフトは正常に表示できるのですが…。
また、中国語 98 は GB カーネルに他の言語ソフトウェアをインストールすると文字化けを引き起こします...
UTF8 については、
Unicode の分岐とも言えます。
漢字を保存するには 3 バイトを使用します...
(Unicode は 4 バイトを使用します)
アプリケーション ソフトウェアは一斉に Unicode に移行しました...
Web アプリケーションで UTF8 を使用することは許可されていませんか?
この記事では、Sandals は UTF8 エンコーディングでの PHP プログラミングを可能な限り多くの側面で紹介しようとします...
なぜ「中国語」を分けて紹介するのかというと……。
まず、英語に関しては UTF8 を考慮する必要がまったくないからです…
多言語システムを構築する予定がない限り...
(ちょっと苦言を呈したいのですが、最近の外国人はこの点を全く気にせずにプログラムを書いています…)
第二に、UTF8 エンコーディングにおける中国、日本、韓国などのマルチバイト言語の処理方法は、実は非常に似ています...
ひょうたんを追ってスコップを引くだけです...
さて...データベース処理部分から始めましょう...
=========================================
データベースへの接続
Mysql 4.1 にアップグレードしたばかりのとき、多くの人はデータがめちゃくちゃになっていることに気づくでしょう...
実は、Mysql が 4.1 から文字セットをサポートしているためです...
そしてデフォルトの文字セットはUTF8です...
(国際標準との統合の重要性が十分に証明されました...ふふ...)
以前は、主に utf8 または GBK エンコードを使用していました...
当然出力データは文字化けしてしまいますが…
コード化けを解決するには...
どのようなエンコード データを取得するかをプログラムに知らせる必要があります...
以前のデータベースは utf8 でエンコードされていたと仮定します...
クエリの前に
mysql_query('SET CHARACTER SET utf8') または die("Query failed : " . mysql_error());
を追加できます。
もちろん、これは 4.1 以降にのみ必要なので、
したがって、次のような判断を追加できます。
$mysqlversion = $db->query_first("SELECT VERSION() AS version");
if ($mysqlversion['version'] >= '4.1')
{
mysql_query('SET CHARACTER SET utf8') または die("クエリが失敗しました: " .mysql_error());
}
このようにして、Mysql のデフォルトのエンコーディングが何であっても、正常にアクセスできます。
(サバイバル期間入金、定期入金、少額出金でも構いません…)
しかし、皆さん国際的ですね…。
まだutf8を使用していますか?
それをトランスコードするにはどうすればよいですか?
その上……
データバージョンアップ時に文字化けが発生した場合はどうすればよいですか?
サラダ!
次回はその内訳を聞いてみましょう…
========================================= === =
データを 4.1 にアップグレードする必要があります
...
まずエクスポートする必要があります...
外国人って本当に無責任だとは…。
以前のエクスポート方法では、常に一部の漢字が失われていました...
たとえば、「お母さんが大好き」を「愛してる」に変えると…
(通常、データの最後のワードは失われます)
すべては一世代遅れています...
(シスター・ザクロ曰く、「このような反抗的な行為が本当にエキサイティングだ」…)
壊れやすい心を守るために…
中国の伝統的な倫理と道徳を維持するためにも...
データに中国語の文字が含まれるフィールドをバイナリ エンコードに変更できます...
具体的な方法は…
次のステートメントを実行できます。
ALTER TABLE `テーブル名` CONVERT TO CHARACTER SET binary;
このようにして、次のような文字タイプ フィールドが作成されます。
CHAR、VARCHAR、TEXT
に変換されます
バイナリ、バービナリ、BLOB
次に、エクスポートして 4.1 環境にインポートします...
もちろん、最後の面倒なタスクは次のとおりです。
タイプを元に戻す必要があります...
4.1 へのアップグレードがあります...
もちろん値下げもありますが…
ダウングレードするにはどうすればよいですか? ? ?
トイレに行くのにサンダル…
次のページにお進みください...
======================================== ==== ===
データは 4.1 からダウングレードされました。4.1 から
エクスポートされた SQL ファイルを下位バージョンのプログラムにインポートできないことに気付いた人もいました。
問題は実際には非常に単純です...
そして、Mysql はすでに私たちのためにすべてを考えてくれています...
エクスポートする場合は --compatibility パラメータを追加してください...
データベースは utf8 でエンコードされていると仮定します...
そして、ターゲットデータベースのバージョンは4.0です...
次に、コマンド ラインに次のように記述します:
shell>mysqldump --user=username --password=password --compatibility=mysql40 --default-character-set=utf8 database > db.sql
この方法でエクスポートされた SQL ファイルは、下位バージョンのデータベースに正常にインポートできます...
データベース部分はついに完了しました...
しかし、PHP プログラミングにどのように注意を払うべきでしょうか?
次のページをお開きください...
http://www.knowsky.com
============================================
PHP ファイルのエンコーディング
すべての PHP ファイルを UTF8 エンコーディングに変換する必要がありますか?
サンダルは「NO」と言います...
こうしましょう...
ファイルに表示する必要のある漢字が含まれている場合...
UTF8エンコーディングに変換する必要があります...
例を挙げてみましょう:
// 私はサンダルです
エコー時間();
上記のコードにはコードがありますが...
しかし、注釈に存在するので...
出力がありません...
したがって、このページを UTF8 形式に変換する必要はありません...
別の例:
echo "I am Sandal";
これは明らかに中国語の文字出力を持っています...
UTF8 に変換すればいいだけです...
もちろん、現在では多くのプログラムがテンプレート (言語パック) テクノロジーを使用しています...
プログラム(非言語パッケージファイル)に出力用の文字が表示されません...
この方法では、言語パック ファイルを UTF8 エンコードに変換するだけで済みます。
(これが言語パックの利点です...あはははは...)
'http://www.knowsky.com
=================================================
UTF8 は 3 バイトを使用するため、
UTF8 中国語インターセプト
...
したがって、従来のsubstr関数は役に立ちません...
多くの専門家が UTF8 漢字インターセプト関数を作成しています...
1. 最初に計算してから
/**
を取得します。
* 著者: ザンディ |
* メールアドレス: [email protected] |
*作成: 200512
* 使用法: echo join('', String::subString_UTF8('漢字', 0, 1));
*/
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
クラス文字列 {
関数 subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = 配列();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = Base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}それ以外{
if (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}それ以外{
$r[] = '';
}
if (++$m >= $lenth){
壊す;
}
}
}
$r を返します。
} // 終了 subString_UTF8
}//終了文字列
echo join('', String::subString_UTF8('漢字', 0, 1));
2. サンダルを先に切ってから切るのはとても賢いと思います...
従来のインターセプト機能を使用して、最初に切り詰めます...
次に、単一の漢字が分割されているかどうかを判断します...
もしそうなら…対処してください…
substr 関数の 3 番目のパラメーターは 3 より大きくなければならないことに注意することが重要です...
なぜサンダルを履かないのか、説明してもらえますか?
// utf-8 文字列の最後の文字を削除するトリム関数
// http://en.wikipedia.org/wiki/UTF-8の指示に従ってください
// どたんん
// 使用法: $str = utf8_trim(substr($str,0,50));
関数 utf8_trim($str) {
$len = strlen($str);
for ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
$str = '漢字';
echo utf8_trim(substr($str,0,3));
3. 他の方法もありますが、
たとえば、007pig は、中国語版の vBulletin で記述された関数です。
短くて甘い...
ソースコードを公開するのは不便です...
ごめんなさい、鳥さん…
今日はここで書き終わります…
トランスコーディングなど書かれていない問題もあります...
最近忙しい…
時間があるときに整理を続けてください...
http://www.quchao.com/?p=6&pp=1