ajaxsearch1.84に全角スペースを入れるとエラー

質問全般・改善要望
返信する
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by dimm »

[サーバ]
 ホスト&契約タイプ:さくらスタンダード
 ネットワーク:インターネット
 PHPバージョン:php5.2.5
 DB:(例 MySQL5.1
[modx]
 バージョン:1.0.2J
 アドオン:ajaxsearch1.84



いつもお世話になっております。ajaxsearch1.84に関してご質問させていただきます。
検索語句の前後どちらかに全角スペースを入っていると検索ボタンを押したとき、下記のエラーが出てしまいます。


« MODx Parse Error »
MODx encountered the following error while attempting to parse the

requested resource:
« PHP Parse Error »

PHP error debug
Error: mb_strpos() [function.mb-strpos]: Empty delimiter
Error type/ Nr.: Warning - 2
File:

/home/1031hp/www/assets/snippets/ajaxSearch/classes/search.clas

s.inc.php
Line: 1198
Line 1198 source: $wordLeft = $mbStrpos($mbStrtolower

($text), $mbStrtolower($searchTerm));

Parser timing
MySQL: 0.0969 s (53 Requests)
PHP: 0.0372 s
Total: 0.1340 s



どなたか原因をお分かりになる方がおられましたらご教示下さい。
よろしくお願い致します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by yama »

当てずっぽに近い対症療法ですが

/assets/snippets/ajaxSearch/classes/search.class.inc.php

コード: 全て選択

  function defaultStripOutput($text){

    if ($text !== ''){
      // replace line breaking tags with whitespace
      $text = stripLineBreaking($text);
      // strip modx sensitive tags
      $text = stripTags($text);
      // strip Jscripts
      $text = stripJscripts($text);
      // strip html tags. Tags should be correctly ended
      $text = stripHTML($text);
    }
    return $text;
  }
上記のブロックを

コード: 全て選択

  function defaultStripOutput($text){

    if ($text !== ''){
      // replace line breaking tags with whitespace
      $text = mb_convert_kana($text,s,"utf-8");
      $text = stripLineBreaking($text);
      // strip modx sensitive tags
      $text = stripTags($text);
      // strip Jscripts
      $text = stripJscripts($text);
      // strip html tags. Tags should be correctly ended
      $text = stripHTML($text);
    }
    return $text;
  }
このように書き換えてみるとどうでしょう?「$text = mb_convert_kana($text,s,"utf-8");」を追記します。
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by dimm »

yamaさん

お返事ありがとうございます。
教えていただいた方法を試してみたのですが、挙動は変わりませんでした。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by sama55 »

自分の環境では再現しませんが、explode()されたアイテムのどれかにNULLがあるのでしょうね。
ワーニング自体は"@"を頭に付加すれば出なくなると思いますが、下の処理が気になります。
assets/snippets/ajaxSearch/classes/search.class.inc.php (L1287) のgetSearchWords()

コード: 全て選択

    else $searchList = explode(' ',$search);
半角空白か全角空白を区切り文字として検索対象文字列を抜き出すとか・・・(自信なしです ^^;)
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by dimm »

yamaさんの環境では再現しないですかぁ。
もう一度インストールしてチャレンジしてみます。

@はどの行の頭につければよいのでしょうか?
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by yama »

dimm さんが書きました:@はどの行の頭につければよいのでしょうか?
Error: mb_strpos()

と出ているので、@ mb_strposとすればよいと思います。とりあえず目障りなワーニングを非表示にしてから落ち着いてバグ探しをするとよいかもですね。

mb_strpos( )に実際に渡ってくる値がどうなってるのか気になるので、直前の行で echo $text; echo $searchTerm; などとするとヒントになりそうです。

getSearchWordsファンクションのreturn $searchList;の直前行で echo $search; を入れるのもよいかな?
(ヒントが出てくるだけで状況は変わりません)
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: ajaxsearch1.84に全角スペースを入れるとエラー

投稿記事 by dimm »

原因がわかりました、下記のコード158行目に入れていたのが原因のようです。
しかし、このコードを取ってしまうと全角で区切った検索をした場合検索結果表示されません。

コード: 全て選択

      // zenkaku space=>hankaku space
      $searchString=mb_convert_kana($searchString, s, "UTF-8");
返信する