parse_url で想定外の文字コード変換が行われてるっぽい件

  http://www.res-system.com/weblog/item/512/catid/34

  全くおんなじ問題に直面していた.まあ,放っておいたけど.

  Google の検索語が URL エンコードされないで,リファラとして飛んでくる.
  これを parse_url で分解しようとしても,parse_url で文字コードが変換されているらしく取得できない.
  よって,explode 関数で分解すればいいらしい.

- ref.: parse_url
  http://www.php.net/parse-url

PHP で MySQL のテーブルを操作するライブラリ MySQL Table Editor

  http://www.phpguru.org/static/TableEditor.html

  デモを見るとかなりいい感じに動いている.

  ただ,サイトにも書いてある通り

Note this is a library and not an application.

  あくまで,ライブラリであると.本体の部分は自分で書く必要がある.

PHP4 でも動作する O/R マッピングフレームワーク phpersistence

- via: blog.xole.net
  http://blog.xole.net/article.php?id=303

PHP の PATH_SEPARATOR について

  PHP で set_include_path() を使って,パスを追加するとき Windows 系と,UNIX 系では
  パスの区切り文字が違うので,今までは

if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
    set_include_path(get_include_path() . ':./libs');
} else {
    set_include_path(get_include_path() . ';./libs');
}


  とかやっていた.

  最近 PATH_SEPARATOR という定数を知って

set_include_path(get_include_path() . PATH_SEPARATOR . './libs');

  で幸せになっていたら,PATH_SEPARATOR が定義されていない場合があることが分かった.

  そこで,正解としては,

if (!defined('PATH_SEPARATOR')) {
    if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
        define('PATH_SEPARATOR', ':');
    } else {
        define('PATH_SEPARATOR', ';');
    }
}

set_include_path(get_include_path() . PATH_SEPARATOR . './libs');


  ということになるのかな.損したか得したか分からない (汎用的なのは間違いなさそうだけど).

手軽に PHP のコードをテストできる PHP Interactive

  http://www.hping.org/phpinteractive/

- via: MOONGIFT
  http://oss.moongift.jp/intro/i-703.html

  激しく便利.

Text_Wiki 日本語化ラッパー

  http://script.dot-wired.org/docs/?page=%E8%87%AA%E4%BD%9C%E3%82%B9%E3%82%A ...

- Text_Wiki の ルールについて
  http://script.dot-wired.org/docs/?page=php%2Fpear%2FText_Wiki%2Frules

- ref.: PEAR :: Package :: Text_Wiki
  http://pear.php.net/package/Text_Wiki

- ref.: Text_Wiki
  http://wiki.ciaweb.net/yawiki/?area=Text_Wiki

  PEAR Text_Wiki に日本語が使える!

xml 文章を配列やオブジェクトにしてくれる PEAR::XML_Serializer

  http://pear.php.net/package/XML_Serializer

  Amazon Web Service で独自の広告を作っていて,XML の処理が面倒くさいとか思っていたら,
  XML_Serializer を発見した.

  実際は,XML_Serializer に含まれている XML_Unserializer を使う.

- インストール

# pear install http://pear.php.net/get/XML_Serializer-0.16.0.tgz

- 使い方

require_once 'XML/Unserializer.php';

$xml = <<<XML
<ItemAttributes>
  <Creator Role="著">宮川 達彦</Creator>
  <Creator Role="著">伊藤 直也</Creator>
  <ListPrice>
    <Amount>3045</Amount>
    <CurrencyCode>JPY</CurrencyCode>
  </ListPrice>
  <Publisher>オライリー・ジャパン</Publisher>
  <Title>Blog Hacks ―プロが教えるテクニック&amp;ツール100選</Title>
</ItemAttributes>
XML;

$Unserializer =& new XML_Unserializer();
$Unserializer->setOption('parseAttributes', TRUE);
$status = $Unserializer->unserialize($xml);
if (PEAR::isError($status)) {
    die($status->getMessage());
}

print_r($Unserializer->getUnserializedData());


- 出力

Array
(
    [Creator] => Array
        (
            [0] => Array
                (
                    [Role] => 著
                    [_content] => 宮川 達彦
                )

            [1] => Array
                (
                    [Role] => 著
                    [_content] => 伊藤 直也
                )

        )

    [ListPrice] => Array
        (
            [Amount] => 3045
            [CurrencyCode] => JPY
        )

    [Publisher] => オライリー・ジャパン
    [Title] => Blog Hacks ―プロが教えるテクニック&ツール100選
)

  Amazon Web Service から帰ってきた XML の一部を食わせてみると,見事に配列に入る.
  これは楽チン!

$Unserializer->setOption('parseAttributes', TRUE);


  このオプションは,属性もパーズするためのもの.

PHP 用の Ajax ライブラリ HTML_AJAX

  http://blog.joshuaeichorn.com/archives/2005/07/15/html_ajax/

- サンプル
  http://bluga.net/projects/HTML_AJAX-0.2.0/

- via: X *ole.net
  http://blog.xole.net/article.php?id=272

  なかなかいい感じ.

Windows で実行したプログラムの履歴を見る

  http://yowaken.dip.jp/tdiary/20050712.html#p01

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\
{75048700-EF1F-11D0-9888-006097DEACF9}\Count

  に rot13 で暗号化されて記録されているらしい.Cygwin で以下のようにすると見える.

$ cd /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion
$ cd Explorer/UserAssist/\{75048700-EF1F-11D0-9888-006097DEACF9\}/Count
$ ls 2>&1 | ruby -Ks -rjcode -ne 'puts gsub(/\Als: (.*): .*$/, "\\1").tr("a-zA-Z", "n-za-mN-ZA-M")'

  なるほど.これは消してしまっても構わないのかな?

  ちなみに,PHP で rot13 変換をするには

echo str_rot13('hoge');


  便利.だけど,大文字小文字の変換はしてくれないので注意.

PHP 4.3.11 の mb_detect_encoding() がバグっている件

  結構前の話だけど,忘れてしまいそうなので.

- 概要
  PHP 4.3.10 から 4.3.11 へバージョンアップした際,
  mb_convert_encoding() の戻り値を mb_detect_encoding() に渡した場合の結果がおかしい.

- 対策
  以下のパッチを当てる.

Index: ext/mbstring/libmbfl/mbfl/mbfilter.c
===================================================================
RCS file: /repository/php-src/ext/mbstring/libmbfl/mbfl/mbfilter.c,v
retrieving revision 1.1.2.6
diff -u -r1.1.2.6 mbfilter.c
--- ext/mbstring/libmbfl/mbfl/mbfilter.c    13 Apr 2005 08:08:28 -0000    1.1.2.6
+++ ext/mbstring/libmbfl/mbfl/mbfilter.c    14 Apr 2005 14:04:11 -0000
@@ -555,9 +555,11 @@
        while (n > 0) {
            for (i = 0; i < num; i++) {
                filter = &flist[i];
-                (*filter->filter_function)(*p, filter);
-                if (filter->flag) {
-                    bad++;
+                if (!filter->flag) {
+                    (*filter->filter_function)(*p, filter);
+                    if (filter->flag) {
+                        bad++;
+                    }
                }
            }
            if ((num - 1) <= bad && !strict) {


  http://ns1.php.gr.jp/pipermail/php-users/2005-April/025840.html

  http://ns1.php.gr.jp/pipermail/php-users/2005-April/025880.html