「mb_strpos()」関数の「Empty delimiter」エラーの原因と解決方法

このQ&Aのポイント
  • mb_strpos()関数が「Empty delimiter」エラーを出力する原因について説明します。
  • このエラーは、csvファイルの特定のフィールドの内容に「所定の文字列」が含まれていない場合に起こります。
  • エラーの解決方法としては、csvファイルのフィールドの内容を確認し、必要な場合は所定の文字列を含めるように修正する必要があります。
回答を見る
  • ベストアンサー

Warning: mb_strpos() [function.mb-strpos]: Empty delimiterが出力される原因がわかりません。

Warning: mb_strpos() [function.mb-strpos]: Empty delimiter が出力される原因がわかりません。 mb_strposの引数は、以下の2つ(1)、(2)です。 (1)csvファイルから読み出された1つのレコードの特定のフィールドの内容 (2)「所定の文字列」 症状としては、このWarningは、 どうも、csvファイルのレコードに「所定の文字列」を含むものが ない場合に出力されるようです。 このWarningが出力される原因を解消する方法を教えて頂くか、 上記の場合、このWarningがどうしても出力されるものである場合には、Warningの出力を回避する方法を教えて頂きたく、 どうかよろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • twin_shu
  • ベストアンサー率100% (10/10)
回答No.2

1の者です。 >このWarningがcsvファイルのレコードに「所定の文字列」を含んだものがない場合であっても出力されないようにできるのであれば mb_strpos()関数は引数(1)に引数(2)の文字が存在しなければNULLを返す処理になってるので、正常に動いてるのであればWarningではなくNULLが帰ってくるはずです。 なので、まずはWarningを解決するべきかと。 ちょっと調べてみたところ、どうも引数(2)の「所定の文字列」がNULLだと出る警告のようですね。 なので、まずはその「所定の文字列」にデータがあるかどうか、または設定方法が間違っていないかを調べてみるといいと思います(^-^)

tfj3116
質問者

お礼

教えて頂いたことをもとに再度2つの引数がnullとなることがないか 確認したところ、やっぱりありました。 そこで、これらの引数がnullとなることがないように 予め編集する処理を加えることで解決できました。 大変お手数をかけました。 ありがとうございます。

その他の回答 (2)

  • twin_shu
  • ベストアンサー率100% (10/10)
回答No.3

失礼。 mb_strpos()関数で文字が存在しないときに返すのは、NULLではなくFALSEでした(^^;

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

環境がわからないのではっきりとはわかりませんが、参考サイトの806、808のような症状でしょうか? とりあえず、Warningが出ても動作に問題ないのであれば、関数の頭に「@」をつければ、Warningメッセージは出てこなくなります。 @mb_strpos(○,○)

参考URL:
http://www.rcdtokyo.com/bbs/test/read.cgi/pc2m/1133526993/801-900
tfj3116
質問者

補足

早速教えて頂き、ありがとうございます。 「参考サイトの806、808のような症状か?」については、 データベース等との関連性がないため、同じ背景があるとは思われません。 Warningは、出力されてもこれと言った問題は併発していないと思われますので、とりあえずは、@mb_strpos(○,○)とすることで、出力されないように致しました。 しかし、このWarningがcsvファイルのレコードに「所定の文字列」を含んだものがない場合であっても出力されないようにできるのであれば、その方策を是非教えて頂きたく、よろしくお願い致します。

関連するQ&A

  • strposでEmptyのエラーが。引数には何を?

    PHPのプログラムを書いているのですが、以下のエラーが出てしまい困っています。 Warning: strpos() [function.strpos]: Empty delimiter in /xxx/hoge.php on line 22 22行目には以下のコードがあります。 if( strpos( $v['email'] , $record ) !== false ){ $record にはこちらです。 $record = trim( fgets( $r_fp , 1024 ) ); 調べてみますと、strposの$recordの引数が空?のためのエラーではないかという記事があったのですが、この場合には何を入れればよいのでしょうか?引数に何かを定義しないとだめですか? ちなみに、これは重複アドレスを弾く記述を行っている一部となります。 何かアドバイスありましたらお願いいたします。 宜しくお願いします!m(_ _)m

    • ベストアンサー
    • PHP
  • mb_eregiでwarningが出る

    $URL = "<a href=http://aaa.com/aa.php?id=123>「名前」</a>"; $str = htmlentities($str, ENT_QUOTES, 'EUC-JP'); $str = mb_convert_kana($str, "KVS", 'EUC-JP'); if(mb_eregi($str, strip_tags($URL)){//$strと「名前」をマッチング $bg_color = " bgcolor=#FF0000"; } //$name[$i]の中身は全半角記号入り乱れた文字列 //$strはフォームからPOSTで渡されるユーザー入力文字列 というような処理でユーザー入力の$strに)や(を一文字だけ入れると、 mbregex compile err: end pattern with unmatched parenthesis というwarningが出てしまいます。 また、同じく$や|や()←このカッコは2文字セットを入力すると、 $URLの中身がなんであっても全てにマッチしてしまいます。 一方それ以外の文字であれば全半角問わずきちんとマッチングできているようです。 文字コードはphp.ini、スクリプトともEUCです。 対処法があればご教授いただけないでしょうか。

    • ベストアンサー
    • PHP
  • Warning: mb_strpos(): Unknown encoding or conversion error について

    フォームから入力した文字を $myvalue["kana_mei"] = mb_convert_encoding($_POST["kana_mei"], "SJIS"); でSJISに変換し、 $sStr = $val["kana_mei"]; $sAllowedChars ="あいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつってとだぢづでどはひふへほばびぶべぼぱぴぷぺぽまみむめもなにぬねのらりるれろやゆよゃゅょわをんー "; ($sAllowedChars, "SJIS"); If(mb_strlen($sStr) > 0 ) { for ($i=0;$i<mb_strlen($sStr);$i++) { $sStr1= mb_substr($sStr,$i,1); if(!is_integer(mb_strpos($sAllowedChars,$sStr1))) { $err_msg["kana_mei"] = "※ひらがなでご記入ください。"; } } } でひらがなチェックを行っています。 IE6.0 IE7.0 では、問題ないのですが、MAC IE5.0 Fireworksでは、 mb_substr()で”Warning: mb_strpos(): Unknown encoding or conversion error”となってしまいます。 PHPのバージョンは、4.4.2です。 何方か、対処方法、教えて下さい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 使用禁止文字の検索について

    たびたびすみません。 文字列の中に使用禁止文字がないかチェックしたいのですが悩んでおります。 "}"が文字列に含まれていないかをチェックするとおかしな事が起こります。 チェックにはstrpos関数を使っています。 例えば、 $res = strpos("パクス・ロマーナ", "}"); print("パクス・ロマーナ結果".$res); とすると 本来ならば結果は false が返るはずなのですが、 「パクス・ロマーナ結果11」となってしまいます。 タブ区切りのcsvファイルの中の文字列をチェックしているのですが それが原因なのでしょうか? 他の文字("'"や"{")については何も問題がないのです。 どなたかご教示していただけますと助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【windowsバッチ】CSVの編集

    とあるCSVファイル(先頭行はヘッダー項目)において、個人コード(先頭列)に文字列を含むレコードを除外したいです。 (個人コードに文字列を含まないレコードを読み込んで、新たにCSVファイルを作成でも可) 出来ればVBS等は用いず、バッチのみで行いたいのですが… 恐れいりますが、どなたかご教示いただけますでしょうか。 よろしくお願いいたします。

  • 差分出力及び差分出力について

    プログラム初心者です。教えてください。 vbscriptで2パターンプログラムを書きたいです。 ・1つはテーブルから差分データをcsv形式で出力  既に出力済のレコードは出力しない。 ・もう1つはあるファイルを読み込み、テーブルに追加する  既に取り込み済のレコードについては取り込まないようにする。 基本的な質問ですが、テーブルから出力やテーブルへの取り込みについては、 テーブルにフラグの列を作って、レコードのそのフラグの列が 1の場合は出力済、もしくは取り込み済 0の場合は未出力、もしくは未取り込み と判断させるようなプログラムを書き、該当するレコードだけ 出力もしくは取り込みという処理を書けばいいのでしょうか? 何か参考になる例があれば教えていただけないでしょうか。 よろしくお願いします。

  • PHP検索 完全一致のみヒット

    詳しくないので質問内容におかしな点が多々あるかと思いますが・・ サイト内検索でcsvファイルから文字列を呼び出し一致した文字列を出力するというスクリプトで 完全に一致した文字列だけ出力させたいのですが、 たとえばcsvに「AAA」「ABC」「ARZ」のデータがあり 「A」で検索しても何も出力されず、「AAA」と検索した時だけ「AAA」だけを出力したいのですが 「A」で検索すると「A」から始まる全ての文字列(↑で挙げた文字列全て)が出力されてしまって困っています。 どの部分を変えると完全に一致した文字列だけを検索できるようになるのか指摘してくださればと思います。 <?php function funcSiteLink($str, $pass, $csvFileName){ if($str){ $keyword = mb_convert_kana($str, "s","SJIS"); $arr_keyword = preg_split('/[\s]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY); $file = fopen($csvFileName,"r"); $i = 0; while(!feof($file)){ $csv = fgets($file); $str = explode(",", $csv); $keywordPassArr[$i] = $str; $i++; } $judg = 0; foreach($arr_keyword as $val){ foreach($keywordPassArr as $kpa){ preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE); if($matches[0][1] === 0){ echo '<p><a href="'.$pass .$kpa[1] .'">' .$kpa[0] .'</a></p>'; $judg++; } } } if($judg === 0){ echo "<p>一致しません</p>"; } fclose($file); }else{ echo "<p>一致しません</p>"; } } ?>

    • ベストアンサー
    • PHP
  • 「,」区切りのcsvファイルを検索して文字列抽出したい

    環境:windows2000 csvファイル形式: pat,\path1\path2,\path\path3 pat_a,\path4\path5,\path7\path8 pat_a,\path7\path6,\path8\path9 バッチファイルに引数%A%を渡してcsvファイルを検索します。 検索文字列は引数%A%です。一行目に検索しようとする文字列があると それを%%Jにset してあげます。最後に渡された引数とセットされた文字列が同じであればOKです。 自分で考えたのですがなかなかうまくいきません。 みなさまのご教授おねがいします。 FOR /F "tokens=1 delims=," %%l in ('findstr /R "%1" rrr.csv') do set palam=%%l echo "渡された引数 [%1] " echo "セットされた文字列 [%palam%] " if "%palam%" NEQ "%1" ( goto :erro_end ) 引数は「pat」を渡したのですがセットされた文字列が「pat_a」 になってしまうんです。

  • PLSQLで文字列置換

    よろしくお願いします。 PLSQLで可変長のCSVファイルを読み込み、ある特殊文字があった場合、その 特殊文字が含まれている項目ごとNULLにし、またCSVファイルを出力する。 というプログラムを作りたいのですが、CSVファイルの読込み、書き出しのやり方 は判ったのですが、文字列置換がどうすればいいかわかりません。 またファイルはマルチレイアウトで、カラム数とも不定です。 例) 入力ファイル: A,B,C,D,ABCDEFG,FF,GG となっている場合、'E'という文字があるカラムはNULLで出力する というときに 出力ファイル: A,B,C,D,,FF,GG としたいのです。 ご教授下さい。

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

専門家に質問してみよう