PHP strtr()のバグ?仕様?
sample.phpの内容
<?php $str = "Hello world!\n"; echo strtr($str, "Hello ", ""); echo strtr($str, array("Hello " => "")); ?>
2つの出力が同じ"world\n"であることを期待したのだが実際は異なる。
$ php sample.php Hello world! world! $ php -v PHP 4.4.8 (cli) (built: Feb 27 2008 11:21:28) Copyright (c) 1997-2008 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies $
PHP 5.2.6でも同じ。
$ php sample.php Hello world! world! $ php -v PHP 5.2.6 (cli) (built: May 22 2008 17:26:15) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
strtr() を見ると、
説明
string strtr ( string $str , string $from , string $to )
string strtr ( string $str , array $replace_pairs )この関数は str を走査し、 from に含まれる文字が見つかると、そのすべてを to の中で対応する文字に置き換え、 その結果を返します。
from と to の長さが異なる場合、長い方の余分な文字は無視されます。
とある。単に、fromの文字を見つけてtoに変換すると思っていたが、
from と to の長さが異なる場合、長い方の余分な文字は無視されます。
とあり、長い方の余分な文字、"Hello " - "" つまり、"Hello "は無視されるのではないだろうかと思うと、仕様なのかもしれないが、なんとも。。。。