ホームページ > データベース > mysql チュートリアル > UTF-8 エンコーディングを使用しているにもかかわらず、新しい Codeigniter Web サイトでペルシア語文字が正しく表示されないのはなぜですか?

UTF-8 エンコーディングを使用しているにもかかわらず、新しい Codeigniter Web サイトでペルシア語文字が正しく表示されないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-13 12:46:11
オリジナル
202 人が閲覧しました

Why Are My Persian Characters Displaying Incorrectly in My New Codeigniter Website, Despite Using UTF-8 Encoding?

保存されたデータの奇妙な文字エンコーディング: 古いスクリプトは正常に表示されるが、新しいスクリプトは正常に表示されない

開発者が古い Web サイトをペルシア語で書き直しているときに、奇妙な問題に遭遇しました。ペルソ/アラビア文字を使用します。この問題には、データベースへのデータの保存およびデータベースからのデータの取得時の文字エンコーディングの不一致が関係していました。

データベース構成と文字エンコーディング

以前のスクリプトでは、TUBADBENGINE というデータベース エンジンを使用して、保存されたデータを管理していました。文字コードは「utf8_persian_ci」です。 Codeigniter でコーディングされた新しいスクリプトには、文字セットと照合順序の設定として「utf8」と「utf8_persian_ci」も含まれていました。

意図しない文字変換

ただし、データベースにペルシア語文字を入力すると、古いスクリプトでは、新しいスクリプトでは異なる表示がされました。古いスクリプトでは文字が意図したとおりに正しく表示されていましたが、新しいスクリプトでは奇妙な表現が行われました。

さらに詳しく調べると、データベースに保存されているデータが誤った形式であることが判明しました。ペルシア語文字「aaaaaa」を挿入すると、「عمراÙ」が保存されます。

新しいスクリプトでこのデータを取得すると、「عمراÙ」と表示されました。ただし、古いスクリプトでは依然として「aaaaaa」と正しく表示されていました。

原因の調査中

さらなる分析の結果、問題の根本が発見されました。古いスクリプトで使用されていたデータベース接続が誤っていたということです。データベースとテーブルが utf8_persian_ci で構成されているにもかかわらず、latin1 文字エンコーディングを使用するように設定されています。

この結果、次のようになります。プロセス:

  1. 新しいスクリプトは、latin1 エンコードされたデータベース接続を介してペルシア語文字を UTF-8 形式で送信しました。
  2. データベースは、latin1 エンコードに従って文字を受信して​​保存しました。
  3. 新しいスクリプトがデータをフェッチすると、latin1 でエンコードされた文字が次のように解釈されました。 UTF-8 は問題をさらに悪化させます。

解決策

この問題を解決するには、データベース内のデータを正しい文字エンコーディングに変換する必要がありました。この変換には次のクエリが使用されました:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
ログイン後にコピー

データの変換後、新しいスクリプトはペルシア語文字を正しく表示できました。

以上がUTF-8 エンコーディングを使用しているにもかかわらず、新しい Codeigniter Web サイトでペルシア語文字が正しく表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート