2

これは私のコードです:

class_search.php

        case 'users':
            if(!empty($_REQUEST['user'])){                  
                if(strlen($_REQUEST['user']) >= 3){
                    $_REQUEST['user'] = $this->sanitize($_REQUEST['user'], 'string');
                    $stmt = $this->sql->prepare('SELECT
                                                        id,
                                                        nome,
                                                                                                                    url
                                                    FROM
                                                        animes
                                                    WHERE
                                                        nome LIKE ?

                                                    LIMIT 10');

                    $stmt->execute(array('%'.$_REQUEST['user'].'%'));
                    $this->queries++;
                    $c = 0;
                    if($admin){
                        $result['users'] = array();
                    }

                    if($stmt->rowCount() > 0){
                        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                            if($admin){
                                $result['users'][$c] = array('name'=>($prefix ? '[usr] ' : '').$row['nome'], 'id'=>$row['id']);
                                $c++;
                            }else{
                                $result[] = ($prefix ? '[usr] ' : '').$row['nome'];
                            }
                        }
                    }
                }
            }
            break;

general.js

$('#top_search').typeahead({
    source: function(typeahead, query) {
        $.ajax({
            url: baseurl + "/ajax_calls.php",
            dataType: "json",
            type: "POST",
            data: {
                call: 'top_search',
                user: query
            },
            success: function(data) {
                typeahead.process(data);
            }
        });
    },
    onselect: function(obj) {
        location.href= baseurl + '/animes/'+obj;
    }
})

ajax_calls.php

        case 'top_search':
            $status = $site->process_autosearch('users');
            break

;

onselect に問題があります。MySQL で行の URL を選択し、json にエンコードする必要があります。1 つの結果をクリックすると、mysite.com/animes/name of anime/ (はい、スペースあり) にリダイレクトされ、これを修正する必要があります。

phpMyAdmin の表アニメ: http://s18.postimage.org/3ulrcmss9/Animes_Table.jpg

すぐにビデオ: http://www.screenr.com/plZ7

4

1 に答える 1

0

を使用する必要がありますurlencode()。class_search.php ファイルで、この部分を更新します。

if($admin){
    $result['users'][$c] = array('name'=>($prefix ? '[usr] ' : '').urlencode($row['nome']), 'id'=>$row['id']);
    $c++;
}else{
    $result[] = ($prefix ? '[usr] ' : '').urlencode($row['nome']);
}

また、検索オートコンプリートでも名前が適切に表示されるようにするには、jQuery も変更して、次のdecodeURIComponent()ように関数を objにラップする必要があります。

onselect: function(obj) {
    location.href= baseurl + '/animes/' + decodeURIComponent(obj);
}
于 2013-02-18T08:16:28.833 に答える