[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 メーリングリストの案内