2

私はPHPでUTF-8エンコーディングを使用しており、必要に応じて出力を取得し続けています。そして、コードに何も起こらずに、出力が突然変化します。

以前は、ヘブライ語の出力を取得していました。今、私は「&&&&&」を取得しています。

これを引き起こしている可能性のあるアイデアはありますか?

4

4 に答える 4

3

これらは最も一般的な問題です。

  • PHP/HTML ファイルを作成しているエディター
  • サイトを表示している Web ブラウザ
  • Web サーバーで実行されている PHP Web アプリケーション
  • MySQL データベース
  • データを読み書きしている外部の場所 (memcached、API、RSS フィードなど)

そして、あなたが試すことができるいくつかのこと:

エディターの構成

テキスト エディター、IDE、または PHP コードを記述しているものが何であれ、ファイルが UTF-8 形式で保存されていることを確認してください。FTP クライアント、scp、SFTP クライアントには、特別な UTF-8 設定は必要ありません。

Web ブラウザが UTF-8 を使用することを認識していることを確認する

ユーザーのブラウザがすべてのデータを UTF-8 として読み書きできるようにするために、これを 2 か所で設定できます。

content-type タグ

content-type META ヘッダーで、次のように文字セットとして UTF-8 が指定されていることを確認します。

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

HTTP 応答ヘッダー

Content-Type 応答ヘッダーでも、次のように文字セットとして UTF-8 が指定されていることを確認してください。

ini_set('default_charset', 'utf-8')

MySQL 接続の構成

これで、ユーザーから受け取るデータはすべて UTF-8 形式であることがわかりました。PHP と MySQL データベース間のクライアント接続を構成する必要があります。MySQL クエリを実行するだけの一般的な方法があります。

SET NAMES utf8;

…そして、使用しているクライアント/ドライバーに応じて、代わりにこれをより簡単に行うためのヘルパー関数があります。

組み込みの mysql 関数を使用

mysql_set_charset('utf8', $link);

MySQLi を使用

$mysqli->set_charset("utf8")

*PDO_MySQL を使用 (接続時)*

$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
);

MySQL データベース

MySQL がデータをテーブルに UTF-8 として格納することを認識していることを確認する必要があるだけです。SHOW TABLE STATUS の出力の Collat​​ion 値を調べることで、エンコーディングを確認できます (phpmyadmin では、これはテーブルのリストに表示されます)。テーブルがまだ UTF-8 でない場合 (latin1 である可能性が高い)、テーブルごとに次のコマンドを実行して変換する必要があります。

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;

最後に気を付けるべきこと

これらの手順がすべて完了すると、アプリケーションに文字セットの問題がなくなります。注意すべき点が 1 つあります。ほとんどの PHP 文字列関数は Unicode に対応していないため、たとえば、マルチバイト文字に対して strlen() を実行すると、入力のバイト数ではなく、入力のバイト数が返されます。文字。これらのバイト/文字の問題が問題を引き起こすことはそれほど一般的ではありませんが、マルチバイト文字列 PHP 拡張機能を使用してこれを回避できます。

ここでフォームを取得: http://webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/

于 2013-05-27T05:44:41.133 に答える
1

この機能を試してください - >

$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");

詳細 - http://php.net/manual/en/function.mb-convert-encoding.php

于 2013-05-27T05:55:47.657 に答える
1

headerこのようにコンテンツタイプを設定してから試してください

header('Content-Type: text/html; charset=utf-8');
于 2013-05-27T05:38:27.627 に答える
-1

このメソッドをまとめて、作業中のファイルで呼び出したところ、問題が解決したようです。

function setutf_8()
    {
    header('content-type: text/html; charset: utf-8');
    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
    }

お世話になりました!:)

于 2013-05-27T06:27:03.343 に答える