2011-12-19 8 views
12

explode()関数は、mb_split()に相関マルチバイトセーフ機能を持っています。PHP:マルチバイト文字列のimplode()関数は安全ですか?

implode()の相関機能はありません。これは、マルチバイト文字列でimplodeが既に安全であることを意味しますか?

+0

私はマルチバイトの安全 '分割が必要である理由を理解することに苦労しています() 'を最初に置きます - 文字列を分割するのはデフォルトではマルチバイトセーフです、いいえ?しかしそれは別の質問です。 –

+0

PHPはすべての文字列(AFAIK)を生のバイナリバイトシーケンスとして保存するので、理論上は、分割トークンの正しいバイナリ表現を渡す限り、マルチバイト文字列でも 'explode()'を使うことができるはずです。したがって、 'implode()'にも同じことが言えます - 結合デリミタとして渡されるバイナリシーケンスは文字通り使われるので、デリミタが正しく格納されていれば問題はありません。 – DaveRandom

+1

@DaveRandom:マルチバイト文字が2つのシングルバイト文字のように見えるかもしれませんか?これらのシングルバイト文字のうちの1つがデリミタである場合、意図せずにマルチバイト文字に分割される可能性はありますか? –

答えて

6

デリミタと配列内の文字列に整形式のマルチバイトシーケンスしか含まれていない限り、問題はありません。基本的に

implodeは空想連結演算子であり、私は連結は、マルチバイト安全ではないシナリオを想像することができませんでした;)

+2

この文脈で "整形式のマルチバイトシーケンス"が何を意味するかは完全にはわかりませんか? (私は残りの部分に同意する) –

+0

ありがとう。私はデリミタとしてスペースを使用しています: 'mb_split( ''、$ mbstring)'。これは整形式のマルチバイトシーケンスを構成しますか? –

+0

@danielfaraday文字列が使用するマルチバイト文字セットにスクリプトが格納されているかどうかによって異なります。そうでなければ、そうではありません。 – DaveRandom

関連する問題