Получение совпадающего контекста полнотекстового поиска MySQL в PHP (и безопасность)

Я выполняю полнотекстовый поиск на "страницах" моей таблицы MySQL. Я показываю список страниц, которые соответствуют ключевому слову в их «заголовке» (обычный текст, VARCHAR, 255) или «содержимом» (html, TEXT). Когда совпадение найдено в поле «содержание», я хотел бы отобразить фрагмент, в котором было найдено совпадение. Я понятия не имею, как это сделать.

Можете ли вы направить меня в правильном направлении?

$query = '  SELECT 
                *, 
                MATCH(title, content) AGAINST("'.$keyword.'") AS score 
            FROM 
                page 
            WHERE 
                MATCH(title, content) AGAINST("'.$keyword.'")
            ORDER BY 
                score 
            DESC    ';
$result = mysql_query($query) or die (mysql_error());
if(mysql_num_rows($result) > 0) {   
    $output .= '

Your keyword matches the following pages:

'; while($row = mysql_fetch_assoc($result)){ $title = htmlentities($row['title']); $content = htmlentities(strip_tags($row['content'])); $content = limit_text($content, 250); // Cuts it down to 250 characters plus ... $output .= '

'.$title.'

'; if(trim($content) != '') { $output .= '

'.$content.'

'; // I'd like to place a snippet here with the matched context } } } else { $output .= '

Keyword not found...

'; }

Также у меня есть вопрос относительно безопасности. Прямо сейчас я проверяю $ keyword тремя способами:

  • Не пусто?
  • Более двух символов?
  • Не опасно? (см. ниже)

Я использую регулярное выражение, чтобы соответствовать следующему, чтобы увидеть, опасен ли ввод пользователя

Это может быть немного нелепо, и его легко обойти, но это, по крайней мере, минимальная форма защиты от эксплойтов XSS. Каков рекомендуемый способ защиты от фильтрации ключевого слова, предназначенного для поиска? Является ли PHPIDS излишним?

6
задан Brian Tompsett - 汤莱恩 11 June 2015 в 18:25
поделиться