[PHP-users 23015]Re: mb系使えない環境で全角 ー を含めた文字列の検索
mooth959 @ infoseek.jp
mooth959 @ infoseek.jp
2004年 8月 18日 (水) 22:46:04 JST
こんばんは、赤坂57です。
ミワさん、PHPユーザーさん、富田さん、本当に有難う御座います。
■ ミワさん
> split は正規表現で分割しますので、
> この場合は explode を使った方がいいでしょう。
はい、お恥ずかしいです。その様に致します。有難うございます!
■ PHPユーザーさん
> この場合、検索文字列に何が入るのか予想がつかないので、それを関数
> split()の引数に直接持っていくのは駄目ではないかと思います。もしど
> うしてもsplit()を使いたいのであれば、preg_quote()なんて関数があり
> ます。
>
> ただ、既に他の方から回答がある通り、split()は正規表現を使って文字
> 列を分割しますので、正規表現を使用しない場合はexplode()の使用が推
> 奨されてますし、正規表現を使用する場合でもpreg_split()の方が一般的
> に高速であると言われていたと思います。
以前、切り分け、配列化によくexplode()を使っていたのに、鳥の脳みその
もので、ちょっと、他の言語を使うと、その時の切り分け=>split ?
見たいになって、explode()が脳ミそのメモリから外れていました。
いえいえ、
そう言う事でなく、ミワさん、PHPユーザーさん、そして、富田さん
ご指摘の通り、”spilt()は正規表現で分割”を把握致しました!
■ 富田さん
> $kの内容の文字コードは何でしょうか。おそらくEUCならこのような問題は
> 起こらないので、SHIFT-JISではないかと思いますが、
ご指摘の通りです!実は携帯サイトとの連動を考え、そうでなければ
EUCで作るのですが、しかしこれもまた、あまり理由にはなりません。
有難う御座います。
> $kの内容がShift-JISの文字列であるとすると、以下のように
> 解釈することができます。
> キ ー ワ ー ド
> 834c 815b 838f 815b 8368 (16進表記)
> ? L ? [ ? ? ? [ ? h (ASCIIコードに則って文字に変換)
> ※ASCIIコードの範囲外の文字は?とする
> 正規表現の文法上、[と]は対でなければならないはずですので、
> Warning: unexpected regex error (7) in /home/・・・
>
> というメッセージが表示されるのだと思います。
> よって、[PHP-users 23007] [PHP-users 23006] で紹介してく
> ださっているsplitのかわりにexplodeを使うか、$kをpreg_quote()
> する方法が良いと思います。
すみません、過去のMLの検索はしたのですが、十分でありませんでした。
[PHP-users 23007] [PHP-users 23006] を参照します。
preg_quote()も試します!
> $k='キーワード;
> $fp='検索文字列';
> $sf=split(base64_encode($k),base64_encode($fp));
>
> としても、あるはずの文字に、マッチ(切り分け)自体しませんでした。
>
> 着想は良いのですが、Base64の特性上エンコードの際前後のバイトを
> 考慮するので、たとえば、"aキ"と"キa"をエンコードした結果は全く
> 異なる結果になります。
>
> base64の際は、24bit(3byte)毎に4byteの文字列に変換しますので、
> 前後に別の文字が入っていると、全く別の文字に変換されます。
個別でエンコードしたものを文全体エンコードした中でさがして、
ブラウザに書き出しCTRL+Fでマッチしなかったので、
もしやと思った通りでした。ご説明でその実際がよく分かりました、
有難う御座います。
> 例:
> "aキ"61834c = 01100001 10000011 01001100
> [ Y ][ Y ][ N ][ M ]
>
> "キa"834c61 = 10000011 01001100 01100001
> [ g ][ 0 ][ x ][ h ]
>
> この場合は、base64_encodeの代わりにbin2hexすると想定した結果に
> なると思います。
bin2hex()やってみます!
皆さんのご丁寧なご教授、本当に深く感謝します。
有難う御座いました!!!
------------------------------------------------------------------------
メダルより 人間ドラマが おもしろい by infoseek
http://ap.infoseek.co.jp/athens5.html
PHP-users メーリングリストの案内