PHPの内部文字エンコーディング

内部文字エンコーディングはphp.iniのmbstring.internal_encodingで指定する。
また、スクリプト内ではmb_internal_encoding()で設定・取得ができる。

この内部文字エンコーディングは何に使われるのか、というと次の3つである。

  • HTTP入力文字エンコーディング変換
  • HTTP出力文字エンコーディング変換
  • マルチバイト文字列(mbstring)関数においてデフォルトの文字エンコーディング

ちなみに、PHPスクリプトの文字コードは「mbstring.script_encoding」で指定する。

HTTP入力文字エンコーディング変換

php.iniのmbstring.encoding_translationの値が「On」の場合、
HTTP入力文字エンコーディングが自動的に内部文字エンコーディングに変換される。

mbstring.encoding_translationの値が「Off」の場合は、何もしない。

HTTP出力文字エンコーディング変換

mb_output_handler()は、内部文字エンコーディングからHTTP出力文字エンコーディングに変換する。

マルチバイト文字列(mbstring)関数においてデフォルトの文字エンコーディング

マルチバイト文字列(mbstring)関数のうち、文字エンコーディングが必要な一部の関数では、
文字エンコーディングを指定しない場合は内部文字エンコーディングが指定されたことになる。

毎回、文字エンコーディングを指定する手間が省ける。

XAMPP for Windows の Apache が起動しない

XAMPP for Windows の Apache が起動しない場合のチェックポイント。

Skypeが起動していませんか。
Apacheが使用するポート80をすでにSkypeが使用しているために、
Apacheが起動できないのかもしれません。

Skypeを終了したらApacheが起動できた場合、やはりSkypeが原因です。
ApacheもSkypeも両方使いたい場合は、Skypeの設定を変更することで対処できます。

  1. Skypeのメニューから「ツール」→「設定」を選択します。
  2. 「詳細」タブの「接続」を選択します。
  3. 「上記のポートの代わりに、ポート80を使用」のチェックを外します。

PHPの$_POST、$_GET、$_COOKIE配列の要素に配列を使う機能

この「$_POST、$_GET、$_COOKIE配列の要素に配列を使う機能」はよく知られていない機能の一つと言っても良いかも知れません。

PHPの$_POST, $_GET, $_COOKIEの要素に配列を使用する

このページを見て、初めて知りました。

早速実験してみる。

test.php

<?php
print_r($_GET);
?>

に、http://localhost/test.php?a[b]=1&a[c]=2 でアクセスしてみると、

Array
(
    [a] => Array
        (
            [b] => 1
            [c] => 2
        )
)

これは便利かも。

XAMPP for Windows + OpenPNEでメール送信エラー

XAMPP for WindowsOpenPNE の組み合わせで、メール送信処理の時にエラーが発生する。

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in …

PHPの設定を変更することで、正常に動作するようになるようだ。

c:\xampp\apache\bin\php.ini の以下の箇所を修正する。

変更前

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

変更後
sendmail_pathの頭にある「;」を削除する。

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

修正後、Apacheを再起動すると、変更が反映される。(再起動するまでは修正が反映されないので注意)