Не выполнять поиск по тегам bbCode

У меня есть обычная функция bbCode, которая ищет, например, [b] и [/b] в моих сообщениях и заменяет их, например, жирным шрифтом. Когда посетитель ищет сообщение в моем блоге, может случиться так, что он или она ищет что-то, что является именем файла для изображения ([img]path/to/image.jpg[/img]). Если это произойдет, изображение исчезнет из поста из-за выделения.

Как сделать так, чтобы поисковая система (которая представляет собой обычный WHERE column LIKE '%string%') не выполняла поиск в моих bbCodes?

Заранее спасибо.


person Airikr    schedule 05.01.2013    source источник
comment
то, что вы хотите, по сути невозможно (или, по крайней мере, настолько невероятно уродливо, что вы НЕ хотите туда идти) в стандартном простом sql.   -  person Marc B    schedule 06.01.2013
comment
Ой. Хорошо. Просто грустно это осознавать :(   -  person Airikr    schedule 06.01.2013


Ответы (1)


Вы можете добавить еще одно предложение, чтобы исключить определенные теги:

WHERE column LIKE '%string%'
AND column NOT LIKE '%[img]%[/img]%'

Обратите внимание, что при этом будут исключены все результаты с тегом [img] внутри, даже если есть другие теги, которые вы, возможно, захотите рассмотреть. Поскольку это, вероятно, не то, что вам действительно нужно, вы должны оставить свой запрос как есть и заменить его регулярным выражением в PHP.

person GOTO 0    schedule 05.01.2013
comment
Большое спасибо! Я не думал об этом так, как ты сейчас. Но когда я сделал то, что вы предложили, он не показал все сообщения. Это просто не показало результатов. У меня так: WHERE data_message LIKE '%".SEARCH."%' AND data_message NOT LIKE '%[img]%[/img]%'. SEARCH содержит строку поиска. - person Airikr; 06.01.2013
comment
Что ж, на первый взгляд это выглядит нормально, если SEARCH является постоянной строкой. Я бы поиграл с SQL-запросом и с кодом, чтобы увидеть, есть ли какие-либо другие синтаксические ошибки. В противном случае может просто не быть совпадений с запросом. - person GOTO 0; 06.01.2013
comment
SEARCH может содержать любой символ, поэтому я думаю, что это из-за этого? - person Airikr; 06.01.2013
comment
Может быть. Запрос возвращает только те результаты, которые удовлетворяют обоим условиям: SEARCH должно быть, а [img] должно отсутствовать. Кстати, поскольку SEARCH не является константой, вы должны избегать ее с помощью mysql_escape_real_string или аналогичного, чтобы предотвратить SQL-инъекции. - person GOTO 0; 06.01.2013
comment
Спасибо. Да. Я пытался использовать mysql_real_escape_string, но мой веб-хостинг не поддерживает эту функцию или что-то в этом роде. - person Airikr; 06.01.2013
comment
Аааа, хорошо, тогда поищите в Google замену вручную на mysql_real_escape_string, я не эксперт по PHP, но я уверен, что это должно быть там. - person GOTO 0; 06.01.2013
comment
Спасибо :) Я проверю это. - person Airikr; 06.01.2013