2012-02-23 5 views
3

私は、タブ区切りのテキストファイルをユーザーから受信して解析する小さなWebアプリケーションを作成しています。これらのファイルは、textareaまたはmultipart/form-data形式でアップロードされます。これらのファイルは、アジアなどのさまざまな文字セットになります。結果的に私はアプリ全体でutf-8を使用しようとしています。php Webアプリケーション用の完全なutf-8準拠ですか?

サイト完全に(私の知る限りでは)UTF-8である:

  • 各PHPファイルがUTF-8エンコーディングで保存されます。
  • 私はphp.iniファイルにdefault_charset = "utf-8"を追加しました。
  • HTMLヘッダが含まれている必要なUTF-8が言及:

    header('Content-Type:text/html; charset=UTF-8'); 
    ... 
    <?xml version="1.0" encoding="utf-8" ?> 
    ... 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    
  • textarea形態はaccept-charset="UTF-8"タグを含みます。

  • dbをutf-8で照合する。
  • dbへの各接続には、オプション1002 => 'SET NAMES utf8'が含まれています。

今、私はちょうど私が手動で(私は&はタブや改行を置き換える識別するためにmb_split()を使用)動作するように私の解析機能の一つにUTF-8からmb_regex_encodingを設定するために必要なことを発見しました。だから...

私のサイトが一度だけであり、すべてのutf-8が一貫していることを確認するために何が必要ですか?特に、mb_internal_encoding()のような他のエンコーディング関数がありますか?その場合、コード内のどこで(例えば、index.phpファイルの先頭に)?

+1

あなたはhttp://stackoverflow.com/questions/1317152 – Vitamin

+1

@Vague見ました - はい、それは 'mb_regex_encoding'も' mb_internal_encoding'どちらも言及しています。 – JDelage

+0

@JDelage:PCRE関数もUTF-8と同様に、FYIのみとなります。 'SET NAMES utf8'を使わないでください。http://php.net/manual/en/mysqli.set-charset.php – hakre

答えて

1

私は2つ以上のものを考えることができます; MySQLを使用している場合、接続文字セットを設定する

できるだけ早期にPHPスクリプトで
mb_internal_encoding('UTF-8'); 

...、と

mysqli_set_charset($link, 'utf8'); 

... PDOについては、ユーザーが指定することができます。 connection string

"mysql:host=$host;dbname=$db;charset=utf8" 
+0

Reg。 'mb_internal_encoding()'、 'session_start()'の前後に行うべきですか? – JDelage

+0

@ JDelage: 'mb _...'は、デシリアライズ時に 'mb _...'関数を使用するシリアライズされたオブジェクトを使用しない場合、 'session_start'とは関係ありません。 – hakre

+0

マルチバイト文字列を操作しようとする前に、マルチバイト文字列操作関数**の内部エンコーディングを設定する必要があります。私はsession_start()が文字列の操作を暗示しているとは思わないので、カーソルとしては使用しません。 – jgivoni

関連する問題