Не търсете в 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
Aargh, добре, тогава потърсете в Google ръчна замяна на mysql_real_escape_string, не съм експерт по PHP, но съм сигурен, че трябва да е там. - person GOTO 0; 06.01.2013
comment
Благодаря :) Ще го проверя. - person Airikr; 06.01.2013