Некоторые строковые функции в PHP нельзя использовать со строками UTF-8, они предположительно исправят это в версии 6, но сейчас вам нужно быть осторожным с тем, что вы делаете со строкой.
Похоже, strtolower()
является одним из них, вам нужно использовать mb_strtolower($query, 'UTF-8')
. Если это не помогает, вам нужно прочитать код и найти каждую точку, где вы обрабатываете $query
или badwords.txt
, и проверить документацию на ошибки UTF-8.
Насколько я знаю, preg_match()
подходит для строк UTF-8, но некоторые функции по умолчанию отключены для повышения производительности. Я не думаю, что вам нужен ни один из них.
Пожалуйста, дважды проверьте, что badwords.txt
является файлом UTF-8 и что $query
содержит допустимую строку UTF-8 (если она поступает из браузера, вы устанавливаете ее с тегом <meta>
).
Если вы пытаетесь отлаживать текст UTF-8, помните, что большинство веб-браузеров не используют кодировку текста UTF-8 по умолчанию, поэтому любая переменная PHP, которую вы выводите для отладки, не будет правильно отображаться браузером, если вы не выберите UTF-8 (в моем браузере, с помощью View -> Encoding -> Unicode
).
Вам не нужно использовать iconv
или любой другой API преобразования, большинство из них просто заменит все нелатинские символы латинскими. Очевидно, не то, что вы хотите.