[PHP-users 23655] Re: str_replace で文字化け

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2004年 11月 17日 (水) 17:59:52 JST


こんにちわ、桝形@お久しぶりです。

> これは、str_replaceが悪さをしているのでしょうか?

仕様(str_replaceはマルチバイトを考慮しない)だと思います。

"  あいうえおか機  "

20 | a1a1 | a4a2 | a4a4 | a4a6 | a4a8 | a4aa | a4ab | b5a1 | a1a1 | a1a1
                                                        ^^   ^^

で、全角ブランクが成り立っているので、全角ブランクを□に
変更した時点で変換されているのだと推測します。

□は「a2a4」であり、

20 | a1a1 | a4a2 | a4a4 | a4a6 | a4a8 | a4aa | a4ab | b5a2 | a4a1 | a1a1
                                                        ^^   ^^

と、なるので「帰」が成立します。

個人的には、str_*やpreg_*、ereg_系は、この辺の動作で全く
信用していないので、特に理由が無い場合はmb_*系を利用した
ほうがヨイと思います(判っていて使うならまだしも。。。)


ていうか、mb_str_replace/mb_explode/mb_strstr/mb_stristr/
mb_striposとか無いのは何故なんでしょうね?

自作するのは簡単なので無いのでしょうか。

例:

if( function_exists( "mb_strstr" ) != true )
  {
   function mb_strstr( $Str, $Key )
   {
    if( strlen( $Key ) <= 0 ){ return false; }

    $Ichi = mb_strpos( $Str, $Key );
    if( $Ichi === false ){ return false; }

    return mb_substr( $Str, $Ichi );
   }
  }


-- 
Seiji Masugata<s.masugata @ digicom.dnp.co.jp>





PHP-users メーリングリストの案内