[PHP-dev 1233] Re: ISO-2022-JPでmb_strcutを使ってみる

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2006年 3月 28日 (火) 15:07:31 JST


こんにちわ、桝形です。

既に収束しているかもしれませんが。。。

> PHP のソースコードを見ていないので確かなことは言えませんけれども、
> mb_strcut で ISO-2022-JP を適切に処理出来ていないのではないでしょうか。

ざっと確認してみたところ、そんな事は無いようでした。
こちらで確認した以下のスクリプトは正しく動いているように思えます。

問題にしているスクリプトでは「$i += 40」と固定の数値を加算しているのが
良くないのかなぁ。。。と思います。

不備がありましたら、指摘して頂けると幸いです。


<?php
// EUC-JPで記載

define( "INTERNAL_ENCODING", "EUC-JP" );
define( "CONVERT_ENCODING", "ISO-2022-JP" );
define( "SPLIT_LEN", 43 );

$String  = "1あ2い3う4え5お6か7き8く9け0こ1さ2し3す4せ5そ6た7ち8つ9て0と1な2に3ぬ4ね5の";
$String .= "1ア2イ3ウ4エ5オ6か7キ8ク9ケ0コ1サ2シ3ス4セ5ソ6タ7チ8ツ9テ0ト1ナ2ニ3ヌ4ネ5ノ";

$Rows = array( );

$String  = mb_convert_encoding( $String, CONVERT_ENCODING, INTERNAL_ENCODING );

for( $i = 0; $i < strlen( $String ); $i += $Size )
{
 $Buffer = mb_strcut( $String, $i, SPLIT_LEN, CONVERT_ENCODING );
 $Rows[] = $Buffer;
 $Size   = strlen( $Buffer );
}

print_r( $Rows );

?>


<?php
// UTF-8で記載
mb_language( "ja");
mb_internal_encoding( "UTF-8");


$string = mb_convert_encoding( "123456789012345678901234567890".
                               "1234567890123456789012345".
                               "6789012345678901234567890".
                               "12345678901234567890","ISO-2022-JP");

$rows = array();
for ( $i = 0; $i < strlen( $string); $i += $Size)
{
 $Buffer = mb_strcut( $string, $i, 40, "ISO-2022-JP");
 $Size   =  strlen( $Buffer);
 $rows[] = $Buffer;
}

foreach ( $rows as $row)
{ echo mb_convert_encoding( $row, "UTF-8", "ISO-2022-JP")."\n"; }

?>


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



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