1

ブラウザにデータを送信するときに PHP が使用するエンコーディングを知るにはどうすればよいですか? つまり、たとえば、iso-8859-1 などの Cotent-Type ヘッダーを使用します。

4

6 に答える 6

1

William が提案した header() ソリューションを使用できますが、Apache を実行していて、Apache 構成がデフォルトの文字セットを使用している場合は、常に優先されます (Internet Explorer はおかしくなります) 参照: AddDefaultCharset

于 2008-09-24T23:12:33.000 に答える
1

コンテンツ タイプとエンコーディングは 2 つの異なるものであることに注意してください。text/html はコンテンツ タイプです。ISO-8859-1 と UTF-8 はエンコーディングです。

通常、サーバーが送信する HTTP 応答ヘッダーは次のようになります。

Content-Type: text/html; charset=utf-8

「charset」は実際には文字エンコーディングです。別のヘッダーにはありません。ただし、「Content-Encoding」と呼ばれるヘッダーがあり、応答が使用する圧縮の種類 (gzip など) を実際に指定します。

HTML を含むファイルで、文字エンコーディングを UTF-8 に変更する場合:

<?
header("Content-Type: text/html; charset=utf-8");
于 2008-09-24T23:22:59.307 に答える
1

通常、ウェブホスティング業者の Apache + PHP サーバーはNOcharsetヘッダーを送信するように設定されています。サーバーがどのように構成されているかをテストする最短の方法は次のとおりです。

  • このツールを使用して、Web サイト上のいずれかのページを取得してサーバー ヘッダーを表示します。サーバーヘッダーに a が表示されている場合、charsetサーバーがそれを使用していることを意味します。通常、charset.
  • もう 1 つの方法は、サーバーでこの単純なスクリプトを実行することです。<?php echo ini_get('default_charset'); ?>上記のように、これは通常、空の文字列を出力します。異なる場合charsetは、PHP の .

2番目の解決策は、Apacheが構成されAddDefaultCharset some_charsetていないことを前提としていますが、これは通常はそうではありませんが、そのような場合、Apacheの設定がPHPのdeafult_charset iniディレクティブをオーバーライドする可能性があるのではないかと心配しています.

于 2012-01-06T12:16:28.477 に答える
0

サーバーがデフォルトのコンテンツまたは文字セットを持つように構成されておらず、PHP も構成されていない場合、PHP は送信のみをContent-Type: text/html行います - 文字セットをまったく指定せず、スクリプトで見たとおりにバイトを送信します。

ブラウザが文字セットが指定されていないページを受信すると、さまざまなことが発生する可能性があります。

  • ほとんどのブラウザーには「エンコード/文字セット」メニューがあります。ユーザーが明示的に選択すると、ブラウザーはそれを適用しようとします。あまり頻繁に発生しないため、次のようになります。
  • 一部のブラウザーは、デフォルトの文字セットでレンダリングしようとします (これはロケールに依存します。たとえば、FF と cs_CZ の場合iso-8859-2、以前は YMMV でした)。
  • IE はヒューリスティックに文字セットを決定しようとします (文字の分布に基づいて推測します。多くの場合、正しくなります。時には間違って、ルーマニア語のページが中国語のテキストとして解釈されます。これは通常、「判読不能」を意味します)。 ")
  • 一部の古いブラウザはフォールバックしますus-ascii

この手順で、PHP スクリプトの文字セットとブラウザの文字セットが一致すると、誤ってテキストが読み取れるようになります。そうでない場合、奇妙な兆候や同様の現象が発生します。

于 2010-08-30T17:45:09.787 に答える
0

で独自に設定できますがheader('Content-type: xxx/yyy');、デフォルトでは text/html が送信されると思います。

于 2008-09-24T23:10:09.103 に答える
0

私の知る限り、PHPは文字列をバイトごとに送信します。つまり、変数が UTF-8 を保持している場合、UTF-8 を送信します。iso-8859-1 がある場合は、それも送信されます。それらを混ぜると、きれいになりません。

于 2008-09-24T23:10:52.567 に答える