プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。お世話になっております。

先日、http://oshiete1.goo.ne.jp/qa4940684.html こちらにて別ファイルにある文字列を変数に代入することをお教えいただきました。(今回の件とは直接的に関係ないと思うのですが・・)

今回再度質問させて頂きたいのは、変数に代入されているテキスト(改行を含まない一行テキスト)を、違う別のファイルに登録されている単語を削除したい。というものです。

その別ファイル(削除すべき単語が登録されているファイル)は、

1
2
3



のように登録されていており、削除する際、

//変数、$moto_txtに長文の1行テキストが代入されてる。
$file_name = "./data/key.txt";//排他単語の取得
if(file_exists($file_name)){
 $f_data_array = file($file_name);
 $f_cnt= count($f_data_array);

 for($h=0; $h<$f_cnt; $h++){
  $delete_key = trim($f_data_array[$h]);
  $moto_txt = str_replace($delete_key, "", $moto_txt);//
 }
}

のように、削除したい単語が登録されているファイルを単語単位で配列に格納し、for文で$moto_txtからstr_replace()を使って削除しようとすると、何故か他の文字(今確認しているのは、「ア」です)まで削除されてしまう状況となっております。

何か他の方法はないかな?と色々と調べているのですが、その方法が分からず、また、上記の流れで、何故他の単語まで削除されてしまうのかが分かりません。

どんな些細なことでも結構ですので、アドバイスいただけると幸いです。

A 回答 (1件)

文字列の置換を行うのであれば、質問にもありましたように、str_replaceを使う事で対応できると思います。



両ファイルの文字コード,プログラムファイルの文字コードは統一されてますか?

また、インストールされていればmb_ereg_replaceなどのマルチバイト関数を使用する事もできるかと思います。
参考URLはマルチバイトの対応について書かれています。
ご参考になればどうぞ。

あと、for文よりもforeach文の方が処理が早いですよ!!

参考URL:http://fetus.k-hsu.net/document/programming/php/ …
    • good
    • 0
この回答へのお礼

a0205s様

こんばんは。早速のご回答を有難う御座います。
質問投函後、色々と見直したところ、登録単語を保存する際、不適切な書き込みを行っていました。

いずれにせよ、削除するための関数に自信がなかった(他に良い方法があるのでは?と)ため、a0205s様のお言葉で安心しました。
(foreach文の方が処理が早いですよ!!このアドバイスにも感謝いたします!)

ご丁寧なアドバイスを有難う御座いました!

お礼日時:2009/05/12 20:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!