Прежде всего, да, вы действительно должны использовать UTF-8. Но это не значит, что у вас уже есть данные в кодировке UTF-8.
Во-вторых, похоже, что этот символ является HTML-кодом в базе данных уже . Это проблема, потому что кажется, что на любой странице, отображающей этот символ , также пытается HTML-кодировать контент. Вот пример того, о чем я говорю.
Данные от пользователя: ě
Данные HTML кодируются (через htmlentities () ) перед входом в БД: ě
Данные, хранящиеся в БД: ě
Данные, полученные из БД: ě
Данные HTML кодируются перед печатью на странице: ě
Данные, как видно в браузере: ě
Вы это видите? Символ становится двойным кодированным , поэтому на втором этапе кодирования символ амперсанда преобразуется в сам объект.
Это проблема с данными в кодировке HTML перед их сохранением в базе данных. Это следует делать только перед отображением контента, а не перед хранением.