Это проблема с кодировкой символов. Символы представлены числами, и существует множество кодировок символов, указывающих, какое число и какой символ.
В вашем коде задействованы три, возможно, разные кодировки. Кодировка базы данных, кодировка PHP и кодировка веб-страницы. Все они должны договориться о том, какую кодировку они используют. Или они должны знать, какую кодировку используют другие, и правильно конвертировать.
? обозначает число, которому нет соответствующего символа в наборе символов, который использует ваша веб-страница. $ одинаков во многих наборах символов, поэтому он менее чувствителен к кодированию глупостей. € часто отличается, поэтому он чувствителен к ошибкам кодирования.
Любая точка, передающая текст из одной системы в другую, может искажать текст. Передача текста с веб-страницы в PHP, вставка текста из PHP в базу данных, выборка текста из базы данных в PHP и текста из PHP на веб-страницу.
Самое простое необходимо убедиться, что все они используют UTF-8, наиболее распространенную кодировку, которая обрабатывает практически каждый символ.
Этот PHP Круглый стол по Кодировке символов и UTF-8 в PHP поможет вам решить проблему. Также ответы на Установка PHP кодировки по умолчанию для utf-8 .
Вы можете проверить набор символов своей базы данных, выполнив эти ответы .
Наконец, проверьте кодировку символов вашей веб-страницы. В большинстве браузеров это будет «Информация о странице». Например, Stack Overflow имеет кодировку текста UTF-8.
Примечание. Не используйте конкатенацию строк для ввода значений в запросы SQL. Использовать параметры привязки . Он менее глючный и более безопасный.