「PHPクックブック」では、発信データの文字エンコーディングをutf-8に適切に設定するには、default_encoding
構成をutf-8に編集する必要があると彼らは述べています(p.589)。
ただし、php.ini
にこの構成が見つかりません。 default_encoding = "utf-8"
と言う行を追加するだけですか?
;default_charset = "iso-8859-1"
があります。ご覧のとおり(;
)、現在はアクティブ化されていません。セミコロンを削除して"utf-8"
に設定する必要がありますか?これでデフォルトのエンコーディングが処理されますか?
また、何をすべきかわからない他のエンコードディレクティブも見つかりました。
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
...
; http://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15
...
;mssql.charset = "ISO-8859-1"
...
;exif.encode_unicode = ISO-8859-15
単にすべてをutf-8
に置き換えてはならない理由はありますか?
default_charset
をUTF-8に設定する必要があります。
default_charset = "utf-8"
(PHP Cookbookでは、default_encoding
の変更を求められた場合、タイプミスが含まれている可能性があります—聞いたことはありません。)
また、UTF-8エンコード文字を出力する場合は、WebサーバーがUTF-8を出力するように設定する必要があります。 Apacheでは、これはhttpd.confファイルで設定できます。
AddDefaultCharset UTF-8
iconv
、exif
、およびmssql
エンコーディング設定の変更に関しては、おそらくこれらを設定する必要はありません(設定はとにかくコメントアウトされています)が、それは良いことですとにかくすべてをUTF-8に変更することをお勧めします。
行を変更する
;default_charset = "iso-8859-1"
読む
default_charset = "utf-8"
その他のオプションについては、触れないでください。デフォルト設定を避け、常にすべての操作で明示的にエンコーディングを設定します
また、PHPファイルが保存されるエンコーディングに注意してください。表示または比較する文字列が含まれている場合は特に、UTF-8であることを確認してください。
Mysqlクエリでラテン語のアクセントが認識されないため、クエリが失敗するという問題がありました。私は、pdoを使用してmysqlを呼び出すと、文字セットを追加する必要があることがわかりました。奇妙なことは、私が使用した以前のサーバーが正常に動作したことです!
$dsn = 'mysql:Host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
Htaccessレベル(.htaccessファイル)では、phpディレクティブはphp_value default_charset UTF-8
解決するために、「UTF-8」を「UTF-8」(ダッシュなし)に変更し、代わりに問題を解決しました。
CentOS
イザイアス・モウラ