$sql="SELECT *, MATCH content AGAINST ('$kw') AS rel FROM $tbl HAVING rel > 0 ORDER BY rel DESC";
(Добавление)
Сделал простенький сниппет поиска, вроде работает. Список ссылок на статьи с искомым критерием выводит.
Теперь думаю сделать таблицу БД, в которую собирать результат поиска. Оттуда можно будет выводить тексты статей с подсветкой искомого критерия.
$sql="SELECT *, MATCH content AGAINST ('$kw') FROM $tbl";
// не находит ничего
$sql="SELECT * FROM $tbl WHERE MATCH (content) AGAINST ('$kw')";
$res=mysqli_query($link,$sql);// Выполняем запрос в БД
В обоих случаях запрос работает, но результат - либо ничего не найдено, либо везде найдено (все строки таблицы), независимо от условий поиска (слово, несколько слов).
Помогите, люди знающие - разное перепробовал, но без успеха.
sadex пишет:
цель htmlspecialchars - снижать быстродействие и отбирать ресурсы сервера.
Такого я нигде не писал. А писал о том, что htmlspecialchars не всегда удобно и целесообразно применять. (Добавление)
Мелкий пишет:
Почему непростой? Только белый список. Чёрные списки бесполезны для безопасности.
Не уверен, что это так для всех случаев жизни. Но это вопрос непростой, и если есть желание, вопросы фильтрации и валидации html, особенно при подходе, когда bb-коды не применяются, можно обсудить в отдельной теме: http://forum.php.su/topic.php?fo...9&topic=5306
Чтобы не было каши в обсуждении, я и создал эту тему. Интересуют, особенно, эффективные способы фильтрации html при отсутствии bb-кодов разметки текста, когда вместо них применяются аналогичные html-коды форматирования текста в сообщениях пользователя. Целесообразность и способы применения белых и черных списков в целях фильтрации и безопасности.
Интересует применение известных фильтров: HTML Purifier, HTML Tidy, Simple HTML DOM Parser, htmLawed (особенно) и т.д.
В целях данной темы предлагаю под валидацией понимать проверку html-документа или текста в html-разметке на отсутствие ошибок (незакрытые теги, неверный синтаксис атрибутов и т.д.). В частности, применяется валидация текста и данных, вводимых пользователем сайта через форму ввода. А под фильтрацией - защиту от вредоносных кодов, включаемых хакерами в html-коды.
Два основных подхода. Применение bb-кодов разметки текста, вводимого пользователем через форму ввода. Применение html-кодов разметки текста в том же случае.
Применении bb-кодов существенно упрощает дальнейшую фильтрацию, но требует парсинга bb в html. Применение html-кодов разметки текста в том же случае не требует парсинга, но предполагает, как правило, дальнейшую мощную фильтрацию на сервере с применением перечисленных выше мощных фильтров - HTML Purifier, HTML Tidy и т.д.
Давайте проще. Вы желаете для удобства юзеров допустить применение в тексте спецсимволов html типа <, >, &. И из-за этих несчастных трех символов, которые в текстах новостных/информационных сайтов для непрограммистов практически не встречаются, а если встречаются то могут быть заменены на слова "меньше", "больше", "и" делать дополнительные процедуры, которые будут снижать быстродействие и отбирать ресурсы сервера.
Теперь вспомним название темы: "Текст без кода и htmlspecialchars". В общем плане, и не только при использовании bb-кодов форматирования текста, но и при их отсутствии.
В простом случае, когда у вас есть bb-коды разметки, издержки на отображение указанных выше трех символов будут минимальны.
Но в случае когда bb-кодов нет, а это довольно распространенный подход (разметка текста в html-тегах форматирования), как вы будете отделять эти три смысловых спецсимвола в тексте от аналогичных в html-тегах форматирования текста? Отделить и отобразить, конечно, можно, но с какими издержками?
Можно конкретный пример? У меня пока нет таких проблем. html без кавычек, конечно, не во всех случаях жизни, а для ограниченного набора тегов форматирования текста. HTML5 вполне допускает html без кавычек, грамотно реализованный, конечно. (Добавление)
Мелкий пишет:
Разумеется, замена только синтаксически корректного BB только по белому списку с обязательной валидацией параметров.
При наличии валидации (которая не допустит наличие ошибочных тегов html, часто уже на клиенте) htmlspecialchars будет не нужна, и ее с успехом заменит strip_tags. Опять же, получается что htmlspecialchars, в целях фильтрации, целесообразна только при отсутствии валидации (или при упрощенной валидации, не исключающей ошибок в html-тегах). Допущение на запрет записи для пользователями недопустимых спецсимволов html остается. Это нормальный запрет, на многих популярных новостных и информационных сайтах пользователям в комментариях вообще только text/plain разрешен - и все нормально. Я же им при таком подходе гораздо больше возможностей даю, и парсер при этом можно простой и быстрый применять.
Насчет белых и черных списков - это отдельный непростой разговор, это вопросы и валидации и фильтрации (в основном), обсуждение которых лучше вести в отдельной теме.
решение придет при соприкосновении с реалиями разработки...просто начни и не етить чужие мосги
Я в этих реалиях и так по самые уши... Просто захотелось узнать, как не наступать на грабли по многу раз. Вообще, я яростный минималист на данном этапе. Скорость - превыше всего. Потому, всякое лишнее телодвижение в коде - вызывает дискомфорт. Потому я применяю сокращенный html (без кавычек) для разметки (форматирования) текста. А htmlspecialchars - вызывала немало вопросов в своей целесообразности. Постепенно врубаюсь, что к чему.
Зачем весь? Всё, что НЕ является допустимым и корректным HTML - должно быть заменено на спецсимволы, но ни в коем случае не удалено.
Не все, а только необходимая часть всего. И придется выделять и обрабатывать подстроку, а не весь текст (строку). А это - издержки, которые надо учитывать при сравнении различных подходов. (Добавление)
LIME пишет:
все что тут обсуждалось это банальнейшие вещи не достойные внимания
- преклоняюсь перед корифеями... Но, имхо, надо все-таки уметь четко отвечать на простые вопросы... если они действительно простые, а не пудтить мозги множественными не несущими информации ответами. Без обид.
sadex да когда ты уже начитаешься доков??...всем это не интересно...
Имхо, сомневаюсь однако... Ответ на вопрос я так и не получил, пока сам на него не ответил. Без обид, однако. (Добавление)
Мелкий пишет:
Потому BB удобен в обработке, не нужен список исключений - htmlspecialchars, после замена BB на соответствующий валидный HTML.
Имхо, не все так просто. Белый список и черный список разрешенных тегов (bb или html) все одно придется делать, имхо. Потому как обойти и bbCode без этого - совсем несложно. Без хороших фильтров все равно не обойтись, имхо.
Простой вопрос. Почему стадо баранов из нескольких тысяч особей не может противостоять стае волков из нескольких особей? Ответ - определяющий.
Подсказка. Дело здесь не в том, кто плотоядные а кто травоядные. Например, несколько травоядных животных древнейшей породы обцебыков всегда успешно противостояли стае волков, превышающих их по численности в несколько раз. Но современные травоядные во многом утратили эти качества...
Накопал, пока, такое. Функция strip_tags — удаляет HTML и PHP-теги из строки. Эта функция пытается возвратить строку str, из которой удалены все NUL-байты, HTML и PHP теги.
Особенность. Из-за того, что strip_tags не проверяет валидность HTML, то частичные или сломанные теги могут послужить удалением большего количества текста или данных, чем ожидалось.
По вышеизложенной причине, для фильтрации часто лучше применять функцию htmlspecialchars, которая позволяет увидеть управляющие символы html вредоносного кода в виде их html-сущностей, в то время как strip_tags их просто удалит, заодно удалив и большое количество текста и данных сообщения при наличии ошибочных (незакрытых и пр.) html-тегов в сообщении.
Конечно, все это - имхо. Кому интересно - могут возразить, уточнить, дополнить. Мотивированно.
Вам ведь сказали, что если хотите хорошо научиться, нужно создавать сайт с нуля, без какого-либо готового движка.
Имхо, новичку в веб-программировании (сайтостроении) это мало что даст.
Сделать сайты на двух-трех популярных CMS типа Друпал или MODX (Evo и Revo), чтобы понять, что нужно делать и что не надо. Структуру и работу CMS надо себе представлять, знать, что такое админка и для чего она, что такое система учета (регистрации, авторизации) пользователей и т.д... Простейший блог на php можно наваять двумя-тремя легкими php-скриптами, и будет работать, а толку-то...
Параллельно с PHP обязательльно осваивать HTML, CSS, JS, SQL (MySQL).
Чего не надо делать. Не подменять изучение PHP изучением API какой-нибудь CMS, не изучать jQuery вместо JS и т.д. Не осваивать ORM не зная теории реляционных БД.
Ну и на каком таком основании вы выкидываете даже те символы, что есть на клавиатуре?
Основание - целесообразность и скорость работы. И потом, выкидывать их всегда я и не собираюсь. Только для текстов, в которых недопустимы управляющие спецсимволы html и прочие коды. А таких текстов для, например, для какого-то простого новостного ресурса будет подавляющее большинство. При этом, принятие такого ограничения может существенно упростить парсинг и фильтрацию текстов.
При необходимости отображать коды и спецсимволы можно сделать дополнительный более сложный парсер и фильтр. Тогда для вывода и потребуется htmlspecialchars.
Мелкий пишет:
Поэтому всегда замена на спецсущности.
Вот именно это мне и непонятно. Ну, заменил я на спецсущности весь текст како-то новости, отформатированной (размеченной) в html-тегах форматирования, таких как <b>, <i>, <ins>, <del>, <span style=color:red>, <span style=font-size:18px;> и т.п. И текст в такой разметке хранится в БД. А дальше что с этим делать, как это следует выводить в браузер? Как это следует редактировать?