2

PHP LDAP モジュールを書き直して、PHP のソースである MSVC 9 からビルドします。ここには utf-8 でエンコードされた文字列があります。

char *buffer;

その後、私は電話します

zval *tmp2;
MAKE_STD_ZVAL(tmp2);
array_init(tmp2);
......
add_index_stringl(tmp2, i, buffer, strlen(buffer), 1)

そしてうわー!

PHPスクリプトでは、windows-1252でエンコードされた文字列を取得します! windows-1252 は私のローカル コードページです。この場合、ロシア語の記号が失われ、"???" が表示されます。その代わりに。

ローカル設定に従ってデータを再エンコードしないように php を強制するにはどうすればよいですか? スクリプトに utf-8 が必要です。

PS システム コード ページを windows-1251 に変更できますが、他の言語のオプションではありません。

4

1 に答える 1

0

PHP は文字列を再エンコードしません。PHP は、与えられた文字列を単純なバイト シーケンスとして扱います。あなたが要求した場合にのみ、実際のバイトを変更します。

あなたは「???」が見えると言います ロシア語の文字が実際に UTF-8 でエンコードされていた場合は、ブラウザ ウィンドウに誤って表示されていることを示唆しています。

実際のバイト シーケンスを調べて、入力した文字列が正しいかどうかを確認することをお勧めしますurlencode。エンコードされたバイト。1 バイトしか表示されない場合は、拡張子に問題があると思います。

echo 'и'エディターが UTF-8 をサポートしているかどうかに関係なく、上記の例を単純にエコーすることで、UTF-8 でエンコードされた文字列が正しく表示されることをブラウザー ウィンドウで確認できますecho "\xD0\xB8"

それでも「???」が表示される場合 次に、ページのエンコードをマークアップ (メタ タグ) の両方で UTF-8 として設定し、サーバーがContent-Typeヘッダーでそれと一致していないことを確認しますtext/html; charset=utf-8。HTML ドキュメントではエンコーディングが UTF-8 であると示されているのに、サーバーでは Windows-1252 であると示されているというのは、非常によくある間違いです。一部のブラウザでは、サーバーがオーバーライドできます。

于 2013-08-08T08:50:19.153 に答える