PHP 6.0 開発版を試す

| | コメント(6)

PHP Snapshots の PHP 6.0 開発版を試してみました。

Apache の設定とか

PHP 5.x の時と同じ手順で動きました。今回使った設定

    LoadFile "C:\PHP\6.0.0-dev-200707112230\php6ts.dll"
    LoadModule php6_module "C:\PHP\6.0.0-dev-200707112230\php6apache2_2_filter.dll"
    AddInputFilter PHP php
    AddOutputFilter PHP php
    PHPINIDir "C:\PHP\6.0.0-dev-200707112230"

php.ini

register_globals や magic_quotes、safe_mode 辺りがばっさり削られてました。その他、Unicode のディレクティブが追加されています。

Unicode への対応が強化

まず設定ディレクティブから

ドキュメントが(見付から)ない部分は憶測で書いています。

unicode.semantics
unicode 機能が使用可能かどうか。設定できる箇所は、PHP_INI_PERDIR なので php.ini, .htaccess または httpd.conf です。(php.ini-recommemded で off ってのはどうかしら?どうかしら?)
unicode.runtime_encoding
実行エンジンが内部で取り扱う文字符号化方式。詳しくはこちらを参照
unicode.script_encoding
PHP スクリプト ファイルの文字符号化方式。御法度だった Shift_JIS での記述も可能に。
unicode.output_encoding
出力時の文字符号化方式。mbstring 関数の mbstring.http_output に相当する機能?
unicode.from_error_mode
不正な文字をどうするか。U_INVALID_SUBSTITUTE は unicode.from_error_subst_char で指定したコード ポイントを持つ文字に置き換え。
unicode.from_error_subst_char
不from_error_mode = U_INVALID_SUBSTITUTE 時に置き換える文字。Unicode のコード ポイントで指定?

指定できるエンコーディングは、Unicode 関数が利用しているライブラリ ICU がサポートしているものをそのまま使うようです。

使ってみる

普通に使う

// 文字列リテラルは Unicode 扱い
$string = "文字列リテラルは Unicode 扱い";
var_dump($string);
# unicode(19) "文字列リテラルは Unicode 扱い"

// \u により、Unicode 文字をコード ポイント指定で埋め込める
$string = "\u307a\u3061\u3071\u30fc";
var_dump($string);
# unicode(4) "ぺちぱー"

// カウントばっちり
var_dump(strlen($string));
# int(19)

// 切り取りもばっちり
var_dump(substr($string, 9, 7));
# unicode(7) "Unicode"
バイナリから Unicode へのキャスト

string 型から unicode 型へは unicode.runtime_encoding の文字符号化方式に基づいて変換しているようです。

例えば、unicode.runtime_encoding = Shift_JIS、その他を UTF-8 な環境化では…

;;;;;;;;;;;;;;;;;;;;
; Unicode settings ;
;;;;;;;;;;;;;;;;;;;;

unicode.semantics = on
unicode.runtime_encoding = Shift_JIS
unicode.script_encoding = UTF-8
unicode.output_encoding = UTF-8
unicode.from_error_mode = U_INVALID_SUBSTITUTE
unicode.from_error_subst_char = 3f
# Shift_JIS で符号化された文字列「あいう」
$binary = pack('C*', 0x82, 0xa0, 0x82, 0xa2, 0x82, 0xa4);

// バイナリを扱う関数の戻り値は string のままらしい
var_dump($binary);
# string(6) "??????"

// unicode 型へキャスト。
$unicode = (unicode)$binary;
var_dump($unicode);
# unicode(3) "あいう"
そんな訳で

PHP 6.0 で文字列を取り扱う時は、従来の string 型と Unicode 専用の unicode 型で分けて考えるようになりました。

コメント(6)

How's it going? I enjoyed reading through this publish. My husband and I have been researching for this kind of article with the longest time and We know that your details about the issue at hand is spot on. I'll be certain to introduce this posting to my neice. Can you tell me how to acquire your new RSS feed? Continue to keep on blogging!

Very first factor , A large thank you for you to open my eyes.

This article may possibly be mentioned on Twitter by someone. genuinely?

Funny, I was discussing this thing with my older sister the other day, now I'll have one particular much more argument in my hand when it'll appear to confrontation when once more.

You guys have a wonderful website intending the following, KIU!

2013春.夏新作商品は販売
ブランド財布 グッチ バッグ 腕時計
◆ S/SS品質 シリアル付きも有り 付属品完備!
当社の商品は絶対の自信が御座います。
高品質 安心 最低価格保証

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、zenithが2007年7月13日 02:18に書いたブログ記事です。

ひとつ前のブログ記事は「コンピュータは心を持つか?」です。

次のブログ記事は「ディスク ドライブのトレイの駆動力イコール」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.12