Я выполняю полнотекстовый поиск на "страницах" моей таблицы 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 излишним?