単語検索の区切り文字に全角スペースを使いたい

  • 元タイトル: 単語検索で、単語の区切り文字に全角スペースが使えない。
  • ページ: BugTrack
  • 投稿者: よっちい?
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: 本体新機能
  • 投稿日: 2004-11-11 (木) 10:17:42
  • バージョン: 1.4.4

メッセージ

plugin/search.inc.phpの単語検索で、全角スペースが単語の区切りと認識されず、それを含めた1語として検索をかけてしまいます。

--- func.php.orig       Sat Aug  7 00:39:52 2004
+++ func.php    Thu Nov 11 10:06:10 2004
@@ -175,6 +175,7 @@
        $retval = array();

        $b_type = ($type == 'AND'); // AND:TRUE OR:FALSE
+       $word = mb_convert_kana($word, "s");
        $keys = get_search_words(preg_split('/\s+/', $word, -1, PREG_SPLIT_NO_EMPTY));

        $_pages = get_existpages();

こうするといちおう解決できそうですが、

  • mb_convert_kana()を使ってしまう
  • 検索結果画面の「これらのキーワードがハイライトされています」の語はつながったまま

と、いまひとつです。もう少しいい案はないでしょうか。


  • 多少強引な方法で、次のようにすると大丈夫そうですが・・・ -- teanan 2004-11-11 (木) 10:58:12
    plugin/search.inc.php 18行目付近
    	if ($s_word != '')
    	{
    +		$vars['word'] = mb_convert_kana($vars['word'], "s");
    		$msg = str_replace('$1',$s_word,$_title_result);
    		$body = do_search($vars['word'],$type);
    	}
    • $vars['word']を書き換えるところがちょっと気持ち悪いですが、「これらのキーワードがハイライトされています」は$vars['word']を見ているようです。 -- teanan 2004-11-11 (木) 11:02:17
    • あ、なるほど。lib/func.phpを修正するよりは、影響範囲が狭くできるのでいいかもしれません。$s_wordにもmb_convert_kana()をかけると、タイトルに表示される検索語も半角スペースになりますね。

      とりあえず現状を「仕様」とするのかが判断できないので、コアなメンバーさんのコメントをいただきたいところであります。 -- よっちい? 2004-11-11 (木) 19:16:24

  • こんにちは :) 現状は「ただあるがまま」です。半角スペースがデリミタになっています。私が始めて投げたBugTrack BugTrack/170 をチェックしていただくとニュアンスが伝わるかと思います。 -- henoheno 2004-11-11 (木) 21:34:07
  • 全角スペースがデリミタとして認識されないのは、コマンドライン上のツールを始めとして従来よりあるごく普通の状態だと思いますので、仮にこれを実装する場合についてコメントします。 -- henoheno 2004-11-11 (木) 21:36:04
  • うまい方法があれば使わせていただきます :) でも上記の改造そのままだと、日本語にこだわった造りになってしまうと思います。海外の方がソースを見たら嫌がるでしょう (^^; *1 wordについては、検索結果を一覧表示する部分をハックするのはいかがでしょうか。 -- henoheno 2004-11-11 (木) 21:44:46
  • 積極的に現状を変える考えがない、ということであれば今のままでも構わないと思います。とりあえず寝ながら考えた結果、こんな感じでどうかな
    --- search.inc.php.orig	Sat Jul 31 12:09:20 2004
    +++ search.inc.php	Fri Nov 12 09:16:23 2004
    @@ -10,7 +10,20 @@
     	global $script,$vars;
     	global $_title_result,$_title_search,$_msg_searching,$_btn_and,$_btn_or,$_btn_search;
     
    -	$s_word = array_key_exists('word',$vars) ? htmlspecialchars($vars['word']) : '';
    +	if(array_key_exists('word',$vars))
    +	{
    +		if(LANG == 'ja')
    +		{
    +			$vars['word'] = mb_convert_kana($vars['word'], "s");
    +		}
    +
    +		$s_word = htmlspecialchars($vars['word']);
    +	}
    +	else
    +	{
    +		$s_word = '';
    +	}
    +
     	$type = array_key_exists('type',$vars) ? $vars['type'] : '';
     
     	if ($s_word != '')
    ということになりました。 -- よっちい? 2004-11-12 (金) 09:27:33
  • BugTrack2/233 -- 2007-05-02 (水) 10:44:07
  • すいませんが1,4,6ではどのように設定すればよいか教えてください。 -- ロマ? 2006-05-01 (月) 11:32:31
    • 1.4.7ですとどのように設定すればよいでしょうか?? -- idea? 2010-06-01 (火) 16:36:12
    • 1.4.5以降ならこんな改造かな。
       	if ($s_word != '') {
      +		switch (LANG) {
      +		case 'ja':
      +			$vars['word'] = mb_convert_kana($vars['word'], 's');
      +			$s_word = mb_convert_kana($s_word, 's');
      +			break;
      +		}
       		// Search
       		$msg  = str_replace('$1', $s_word, $_title_result);
       		$body = do_search($vars['word'], $type, FALSE, $base);
       	} else {
       		// Init
       		unset($vars['word']); // Stop using $_msg_word at lib/html.php
       		$msg  = $_title_search;
       		$body = '<br />' . "\n" . $_msg_searching . "\n";
       	}
       
       	// Show search form
      2004-11-12のよっちいさんの案を参考にしました。 -- 2010-06-01 (火) 18:15:36
    • 1.4.7で試してみましたが、うまくいかず下記のようにエラーを返されました。
      Fatal error: Call to undefined function mb_convert_kana() in /格納場所/search.inc.php on line 52
      $vars['word'] = mb_convert_kana($vars['word'], 's');
      の部分です。素人ですいませんが、わかりましたらご教授ください。-- idea? 2010-06-03 (木) 08:57:55
      • 未定義の関数mb_convert_kanaを呼び出そうとした、というエラーです。今回は、mbstringモジュールが入っていない(有効になっていない)事が原因だと思われます。 -- 2010-06-03 (木) 18:36:50

*1 初期化処理や前作業にあたる処理なので、もっと上の行に配置して、さらに英語でコメントを置くのはいかがでしょう

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-06-30 (水) 11:57:38
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.254 sec.

OSDN