stackoverflowを含むインターネット上では、PHPをUTF-8エンコーディングで動作させるには、mb_http_input( 'utf-8')を使用することをお勧めします。たとえば、PHP/MySQL encoding problems. â�� instead of certain charactersを参照してください。一方、PHPマニュアルでは、PHPスクリプト内で入力エンコーディングを修正することはできないとし、mb_http_inputはそれを設定する方法ではなく、それを照会するための手段にすぎないと言います。 http://www.php.net/manual/en/mbstring.http.phpおよびhttp://php.net/manual/en/function.mb-httpetinput.phpを参照してください。これは質問の前の文脈を明確にしただけです。 Apache + PHP + HTMLには、入力エンコーディングから内部エンコーディング、そして最後に出力エンコーディングへの変換を制御するための冗長なコマンドがたくさんあるようです。私はこれの有用性を理解していない。たとえば、ある外部HTTPクライアントからの元の入力エンコーディングがEUC-JPで、内部エンコーディングをUTF-8に設定した場合、PHPは変換を行う必要があります。私は正しい?私が正しいとすれば、なぜ、utf-8の内部エンコーディングにすぐに変換されるのであれば、(元のものを渡すのではなく)php.iniで入力エンコーディングを設定するのはなぜですか?同様の質問が出力を保持します。私のすべてのhtppファイルでは、charset = utf-8のメタタグを使用します。したがって、出力HTTPエンコーディングは固定されています。さらに、PHP.iniでは、HTTPヘッダーにutf-8と表示されるdefault_charsetを設定できます。最終的な出力エンコーディングがすでに修正されている場合、mb_http_output( 'uft-8')を使用するのはなぜでしょうか?要約すると、mb_http_output( 'uft-8')が明らかに必要であり、Dreamweaverなどのエディタにデフォルトで挿入されるより一般的なコマンドに置き換えることはできません。mb_http_output()の有用性は、出力エンコーディングが通常他の手段で固定されている場合ですか?
答えて
これらの2つのオプションは、PHPデザイナーが今までに持っていた最悪のアイデアに関するものであり、エンコーディングに関しては多分悪い考えを持っていました。文字列に特定のエンコーディングに変換するには
、1は1つがからを変換しているものエンコーディング知っている必要があります。着信データは、多くの場合、宣言されていないエンコーディングです。サーバーはちょうどいくつかのバイナリデータを受信しますが、それが表すエンコーディングはわかりません。フォーム上にaccept-charset
属性を設定すると、ブラウザが送信するエンコードを宣言する必要があります。そうすることは、ブラウザがそうすることを保証するものではなく、PHPがどのようなエンコーディングを期待するかをPHPに知らせることにはなりません。
同じことが出力されます。 PHP文字列は単なるバイト配列であり、関連するエンコーディングはありません。私は、入力時に任意の文字列を特定のエンコーディングに変換する方法をPHPがどのように認識しているかは知らない。または出力。
あなたはこれを手動で処理する必要があり、それはとにかくやることは本当に簡単です:入力がmb_check_encoding
(ない_detect encoding
またはそのようないくつかの、ちょうどチェック)を使用して、正しいエンコーディングであるかどうかチェック、あなたが期待するものエンコーディングのクライアントに宣言します無効な入力を拒否し、アプリケーションフロー全体の中ですべてを同じエンコーディングに保つように注意してください。つまり、あなたのアプリではの変換はありません。
あなたはを行う場合はUnicodeのサンドイッチ作り、任意の時点で変換する必要があります:出力に戻って所望の出力エンコーディングに変換し、UTF-8または入力上の別のUnicodeエンコーディングに予想されるエンコーディングからの入力を変換します。変換する必要がある場合はいつでも、からに変換していることを確認してください。 1つの宣言で魔法のように "すべての文字列をUTF-8にする"ことはできません。
この規格はどうなっていますか:http://www.w3.org/International/O-HTTP-charset.en.php?それは役に立ちませんか? –
@ Dominic108確かに便利です。これは*ブラウザに*ページのエンコーディングと宣言します*これを設定する必要があります。これは私が上に書いた何も変わらない。詳細については、[WebアプリケーションでUnicodeフロントを処理する](http://kunststube.net/frontback/)を参照してください。 – deceze
私は、IE 9は、フォームにaccept-charset = "UTF-8"を指定しても、送信するヘッダーに文字セットを含めないことに気付きました。あなたが書いたことに反対してこれを言っているわけではありません。ちょうどそれに気づく。 –
- 1. フェニックスダイアライザーチェンジ、これらは通常の方法で設定されている場合
- 2. は、ブーストプログラムオプションの設定ファイルを出力する手段です。
- 3. ルートbuild.gradleは膨大です。これらは通常どんな手段で分解されていますか?
- 4. 「出力」の値が反復されている値と同じでない場合、プレリュードの反復の代替手段は何ですか?
- 5. データベースに--None--プルダウンメニューが表示されている場合、他のショーデータが入力されている場合
- 6. コマンドラインプログラムでstdoutのエンコーディングが不明な場合は、どのエンコーディングを出力する必要がありますか?
- 7. チェッククラス属性が指定されたクラスで定義されているか、導出された場合
- 8. glDrawElements定数が通常の場合
- 9. 入力と出力が長さ固定でない場合、Encoder-Decoder RNNを使用するにはどうすればよいですか?
- 10. Apache base64エンコーディングの出力が「間違っている」共通
- 11. HDDがUSB経由で接続されているかWMIなしで他の手段で接続されているかを検出
- 12. XmlWriterは常にutf-16エンコーディングを出力していますか?
- 13. 固定出力の固定
- 14. App Engine:urlfetchの代替手段ですか?非常に信頼性が低いと思われる
- 15. javascriptで/ elseが他に定義されていない場合は
- 16. `delete`がJavaScriptで非常に有用な場合のユースケースは何ですか?
- 17. markdownの通常の段落にリテラルhtmlコードを出力しますか?
- 18. LinuxでHDDが検出された場合の通知方法
- 19. 出力キャッシュが既にページレベルで有効になっている場合のWebユーザーコントロールの出力キャッシング
- 20. 通常、.gitignore経由で除外されるNode.JS固有のファイルとフォルダは何ですか?
- 21. 他の多くのクラスで共通のオブジェクトが共有されています
- 22. リスナーがconfigで定義されている場合、TextWriterTraceListenerでどのコンストラクタが呼び出されますか?
- 23. 他の段落に続く場合にのみ、段落にCSS書式を適用してください。
- 24. phpGridの他の代替手段は何ですか?
- 25. ガベージコレクタが異常に実行されている場合は、メモリリークですか?
- 26. 他の半分のスクロールで半分の列が固定されている
- 27. 通常のHTMLでrunat = "server"を使用する場合
- 28. 私は通常、それを使用したい場合
- 29. ビデオ出力は常に30fpsで行われますが、それ以外は設定されていますか?
- 30. 他のビットフィールドが設定されている場合にのみビットフィールドを設定できるようにする
スタックオーバーフローの文字エンコーディングを扱う答えは、部分的または完全に間違っているか、または回答の作成者が明確に理解できず、盲目的に何かが正しく動作しているように見えますが、実際はそうではありません。回答者は信頼できる方法で正しく取得している人はほとんどいません。 – Esailija