Мне нужно взломать систему управления контентом для поддержки полнотекстового поиска для языка, содержащего специальные символы. Они хранятся в базе данных как HTML-сущности. Из коробки CMS не поддерживает это. Об ошибке сообщили давно, но, видимо, она не имеет приоритета. Я придерживаюсь этой CMS, клиент ждет моего решения, поэтому я должен взломать его. Блин ...
Хорошо ... CMS хранит свой контент, переводя специальные символы в html-сущности (на самом деле это делается в комплекте редактора). Таким образом, немецкое слово «möchten» получает «m & ouml; chten» в БД. CMS создает строку запроса, такую как
SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);
Таблица имеет тип MyISAM, поле имеет индекс FULLTEXT.
Если вы используете «m & ouml; chten» в качестве строки поиска, MySQL будет сопоставлять каждую страницу, так как & является оператором, который будет делать сумасшедшие вещи, если он присутствует в строке поиска. Поиск не будет работать.
Следующая идея - заменить специальный символ * в качестве заполнителя. Но это также будет соответствовать нескольким словам, как только у вас будет что-нибудь, начинающееся с буквы «m», и другое следующее слово, заканчивающееся на «chten». Я не знаю почему, но замена только амперсанда звездочкой (поэтому поиск «m * ouml; chten») также приведет к аналогичным результатам.
Та же проблема была описана здесь .
Хорошо, ребята, мне нужна ваша помощь! Есть идеи?
Редактировать: Преобразование содержимого в UTF-8 невозможно.
Спасибо!
craesh