• 締切済み

検索時エラー

はじめまして PHPを用いてsystem.csv内を検索するんですが、ある文字を入力すると Warning: eregi() [function.eregi]: REG_BADRPT と表示されてしまいます。 例えば: 藤、++ などです。 なぜでしょうか? またどのように修正してあげたらいいのでしょうか? よろしくお願いいたします。 <?php if($_GET["key"]==""){ print"キーワードを入力してくださいね"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); $Result=array(); $Data=file("system.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); if(eregi($KeyWord,$lines,$text_b)){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<sizeof($Result);$i++){ $line=explode(",",$Result[$i]); ?> <li><?=$line[2]?><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> <?php } } } ?>

みんなの回答

回答No.2

こんばんは。 >>$KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); このautoは曲者で・・・。 この時点で化けてませんか?

  • nicolish
  • ベストアンサー率72% (13/18)
回答No.1

端的に言うと、eregiはバイナリセーフじゃないから。 マルチバイト文字列、つまり日本語や中国語を正しく扱えない。 ttp://jp2.php.net/manual/ja/intro.regex.php ereg関数は時代遅れで、実際将来的にPHP標準から外される事が確定している。 preg関数を使う事をオススメする。今回の場合preg_matchかな。 それと、単純に文字列を探すならstrposでじゅうぶん。 扱うのがEUC-JPならstrposでいいと思うけど、安全策をとるならmb_strpos。

noname#184276
質問者

補足

お返事ありがとうございます。 preg_matchを用いて検索してみたんですが、やはり 藤 などの文字を検索するとエラー(preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 )が発生します。

関連するQ&A