• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列から指定文字を削除)

文字列から指定文字を削除する方法とは?

a0205sの回答

  • ベストアンサー
  • a0205s
  • ベストアンサー率100% (4/4)
回答No.1

文字列の置換を行うのであれば、質問にもありましたように、str_replaceを使う事で対応できると思います。 両ファイルの文字コード,プログラムファイルの文字コードは統一されてますか? また、インストールされていればmb_ereg_replaceなどのマルチバイト関数を使用する事もできるかと思います。 参考URLはマルチバイトの対応について書かれています。 ご参考になればどうぞ。 あと、for文よりもforeach文の方が処理が早いですよ!!

参考URL:
http://fetus.k-hsu.net/document/programming/php/mb_str_replace.html
a4_chapp
質問者

お礼

a0205s様 こんばんは。早速のご回答を有難う御座います。 質問投函後、色々と見直したところ、登録単語を保存する際、不適切な書き込みを行っていました。 いずれにせよ、削除するための関数に自信がなかった(他に良い方法があるのでは?と)ため、a0205s様のお言葉で安心しました。 (foreach文の方が処理が早いですよ!!このアドバイスにも感謝いたします!) ご丁寧なアドバイスを有難う御座いました!

関連するQ&A

  • 複数文字列をハイライト表示

    お世話になっております。 textという変数に多くの文字列が格納されており、これを表示させる際、別ファイルであるkey.txtに登録されている単語を特定文字をハイライト表示させたいと考えています。 key.txtには、ハイライト表示させたい単語が以下のように1行ずつ登録されている。 宜しく 寒い 天気 暖かい $text = "こんばんは。はじめまして。宜しく。ここ最近随分と暖かい気がします。"; と、これを表示させる際、別ファイルであるkey.txtを参照し、該当すr単語があった場合は、その単語をハイライト表示させたい。 そこで、現在以下のようなスクリプトを組んでみましたが、key.txtの最後の単語である、「暖かい」のみしかハイライト表示いたしません。 $file_name = "./key.txt"; if(file_exists($file_name)){ $f_data = file($file_name); $f_cnt= count($f_data); for($h=0; $h<$f_cnt; $h++){ $check_key = preg_replace("/\n|\r/", "", trim($f_data[$h])); $string = str_ireplace( $check_key, "<span style=\"background:#ffff66; color:black; font-weight:bold\">".$check_key."</span>", $text); } } echo $string; 最後の「暖かい」しかハイライト表示されないのは、恐らく上書きされるから最後の単語のみハイライト表示になるのでしょうが、上書きされないよう何度も見直しているのですが、どれも解決までに至りません。お恥ずかしい・・。 以上、お忙しい中恐縮ですが、アドバイスのほど頂戴出来れば幸いです。よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字列の置き換えについて

    下記のようなテキストファイルを読み込みます。 【お名前】 {@name} 【フリガナ】 {@kana} 【年齢】 {@age} そしてphpでこのようにしました。 $test = array( 'name' => '名前太郎', 'kana' => 'ナマエタロウ', ); $file = 'body.txt'; $body = file_get_contents($file); foreach ($test as $key => $val) { if ( is_array( $val ) ) { foreach ( $val as $val2 ) { $body = preg_replace( "/{@$key}/u", implode(',', $val), $body ); } } else { $body = preg_replace( "/{@$key}/u", $val, $body ); } } echo $body; 結果は、@nameと@kanaは配列にある通りの文字列に変わりますが@ageは そのまま表示されてしまいます。 $testの配列で該当するパターンがない場合には@hogeの値を空白にしたいのですが どうすればいいでしょうか? foreachを$testで行っているのでループ内ではできないような気がしています。 いい方法があれば教えてください!

    • ベストアンサー
    • PHP
  • テキストファイルの指定文字列表示2

    以前質問し、解決したかに見えたのですが、元ファイルに意外なケースがあることに気づき、再度質問させていただきます。 あるブラウザにて、あるテキストファイルの部分を抽出して表示させるスクリプトを考えております。 テキストファイル自体は同階層にあり(./aaa.txt)、不定期に更新されます。内容は下記<./aaa.txt>のような構成になっております。そして下段のphpスクリプト<vvv.php>ですと希望どおりに表示されるのですが、./aaa.txtファイルの中身は状況によっては空行が最初の1回しかないケースがあります。 その場合も、 222222222222 3333333333333 4444444444 のように"111111111111"を除いた、1回目の空行までは表示させたいのですが、何か良い方法はございますでしょうか? ※このようなファイルの場合<vvv.php>で実行すると、何も出力されません。 どうかご教授お願いいたします。 <./aaa.txt> ========= 111111111111 222222222222 3333333333333 4444444444 (空行) 55555555 6666666 66666666 8888888 (空行) 9999999999999999999999 ・ ・ ========= <vvv.php> ========= <?PHP function mytrim(&$item){//(1) $item=str_replace(Array("\r","\n"),Array("",""),$item); } $lines=file("./aaa.txt");//(2) array_walk($lines, 'mytrim');//(3) $blankline=array_keys($lines,"");//(4) $lastline=$blankline[1]-1;//(5) for($i=0;$i<=$lastline;$i++){ if($lines[$i]!="111111111111"){//(6) print $lines[$i]."<br>"; } } ?> =========

    • ベストアンサー
    • PHP
  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

  • 受け取ったデータを基にファイルを操作

    お世話になっております。 以下の内容に行き詰まっております。アドバイスのほど頂戴出来ればと投函しました。宜しくお願いいたします。 やりたいこと。 GETにて受け取ったデータ(URL)を基に、同じディレクトリ内のデータファイル(data.txt)に登録のあるデータから、受け取ったURLを削除した内容で書き換えたい。 ※data.txtは、行単位で各データがタブ区切りで以下のように登録されている。 URL 日付 メール … URL 日付 メール …   現状の報告 以下のスクリプトが実際に作成したものですが、現在、受け取っただけではファイル内容を書き換えることが出来ず、リロードしないと駄目な状況となっています。 アドバイス頂きたいこと。 1.スクリプト自体におかしなところ、見直すべきところがあるか? 2.data.txtを書き換えるスクリプトで、もっと効率のよいものはあるか? 以下がその現在のスクリプトです。 <?php $url = $_GET["url"]; $addfname = "./data.txt"; @$data_array = file($addfname); $data_cnt = count($data_array); $data_array2 = $data_array; $s=0; for($i=0; $i<$data_cnt; $i++){  $data_text = explode("<>", $data_array[$i]);  if($url == $data_text[0]){//GETデータと同じURLだったら配列から削除   $s++;   $key = $i - $s + 1;   array_splice($data_array2, $key, 1);  } } //data.txtのデータ上書き $file=fopen("$addfname", "w") or die("OPENエラー $file_name"); flock($file, LOCK_EX); for($i=0; $i<count($data_array2); $i++){ $new_data = $data_array2[$i]; fputs($file, "$new_data"); } flock($file,LOCK_UN); fclose($file); ?> 先にも述べましたが、現状ではこのスクリプトを実行した後、リロードしなければファイル(data.txt)の書き換えが出来ない状況となっています。どんな些細なことでも構いません。ご意見、アドバイスを頂戴できれば幸いです。お忙しい中恐縮ですが宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • シェル ファイルの中身によって特定の処理

    シェルスクリプトに関する質問です。 少しシェルで言語風なものを作ってみようと思い、作成したのですが、上手くいかないので質問させて頂きました。内容は、特定の文字がファイルに記載されているか判定して、 特定の文字だったら処理をするというものです。 現在、このようなソースになっています↓ #!/bin/sh - #ファイルを設定(仮) file_name="dummy.sh" #行数を変数へ格納 line=$(wc -l ${file_name}) #行数をlog.txtへ書き込む echo ${line} > log.txt #行数以外にファイル名があるので削除 sed -i "s/$file_name//g" log.txt #行数を格納 Line=$(cat log.txt) i=0 #全ての行を変数へ格納 #ここが問題 配列に変数が使えない!? while [ $i = ${Line} ] do array[$i]=$(sed -n "${i}p" ${file_name}) expr `${i} + 1` done # 格納した変数をチェックして、 # 指定された文字(hello)が書かれていればhelloと表示させる b=0 while [ $b = ${main_file} ] do if [ array[$b] = "hello" ] then echo "hello" fi expr `$b + 1` done ここで、配列を利用し、変数への代入が出来ませんでした。 ただ、エラーは表示されません。。。 環境はUbuntu10.10です。 何もいじっていないので、たぶん大丈夫だと思うんですが・・・ 何か解決策はありませんか? また、コレよりいい方法などがあればぜひ教えてください。

  • 連番の数字を含む文字列の作成

    プログラム結果を連番のファイル名がついたファイルに出力したいと考えています。 fopen(file_name,"-") ; でのファイル名file_nameを01.txt, 02.txtという風に変化させるのだと 思うのですが、連番の数字を含む文字列の作成方法がわかりません。 よろしくお願いします。

  • データ末尾の半角スペース

    こんにちは。お世話になっております。 先日、http://oshiete1.goo.ne.jp/qa4951480.html にて、質問させていただき、状況こそ違うのですが、変数に代入された文字列から、事前に登録された単語や記号を削除すると、変数に代入された文字列に一部文字化けが起こる現象が続いています。 ※前回の質問では、str_replaceにて指定文字を削除していましたが、str_ireplaceの方が文字化けの頻度が少ない。 色々と試行錯誤を繰り返しながら、その対策を試しているのですが、一向に改善する兆しがなく困っている状況です。 ちなみに、事前に登録された単語や記号とは、別ページにて、入力されたフォームからデータをPOSTにて受け取り、以下のようなスクリプトで登録を行っています。 //$keyword = trim($keyword).PHP_EOL; $keyword = trim($keyword)."\n"; $file = fopen($file_name, "a") or die("OPENエラー $file_name"); flock($file, LOCK_EX); fputs($file, $keyword); flock($file, LOCK_UN); fclose($file); chmod($file_name,0606); そこで、削除したい単語をブラウザで表示(tableを使って表示)してみたところ、登録されている単語の末尾に、半角スペースがある状況です。 これは以前にも他のプログラムでも気づいてはいたのですが、今回のように不具合が一向に直らない状況で、「もしかしたらこれも原因の1つ?」と気になり質問させてもらいました。 少々回りくどい質問、かつ説明が足りないところがあるかと思いますが、この半角スペースの件、ならびに、このような状況の文字化けに関して、アドバイスなど頂戴出来れば幸いです。宜しくお願いいたします。

    • 締切済み
    • PHP
  • 文字列を配列定義に使用するには

    文字列を配列の定義に使用したいのですが、可能でしょうか? 具体的には以下のような内容です。  $AAA = array("name"=>"山田","val"=>"10"); とすると変数$AAAは配列になります。  $BBB = 'array("name"=>"佐藤","val"=>"20")'; とすると変数$BBBは文字列になります。  $CCC = $BBB; と変数$CCCに代入した場合に、 変数$CCCを配列として認識させたいです。 つまり  print $CCC[name]; //佐藤  print $CCC[val]; //20 というように出力させたいのですが、 根本的に可能なのでしょうか…? よろしくお願いいたします。

    • ベストアンサー
    • PHP