При выполнении скрипта запроса
<?php
mysqli_connect('localhost', 'root', '');
?>
при выключенном сервере MySQL, получаю в браузере отчет об ошибке (warning):
mysqli_connect(): (HY000/2002): ��������� �� �����������, �.�. ������ ������� ������ ������ �� ���������.
Битый текст - это строка, которая является сообщением: "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение." Использую локальный веб-сервер сборки XAMPP v.3.2.
Как получить эту строку корректно в отчете об ошибке?
Вывод ошибки MySQL будет зависеть от самой сборки, LANG на сервере (+еще некоторое количество всякой фигни) и того, как отображает у тебя text WEB-сервер
Я бы посоветовал начать отладку с установки в .htaccess
параметра
AddDefaultCharset utf-8
В 90% случаев на этом все и заканчивается
Если не поможет, иди по шагам:
Кстати говоря, полученный текст можешь взять, скопировать в буфер и вставить вот сюда: https://www.artlebedev.ru/decoder/ - классная штука, позволяет быстро и просто понять, что происходит
Только копируй прям сразу где увидел, а не из поста выше, например. Символ �
- вполне себе печатный символ UTF-8, кодировать его куда-то еще не получится ) Так случается после вставки кракозябр куда-то, где контент в UTF-8.. они просто преобразуются в обычные UTF-8 символы.
UPD. Я провел эксперимент:
mysqli_connect(): (HY000/2002): Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Записал ее в файл в кодировке UTF-8:
$ env | grep LANG LANG=ru_RU.UTF-8
$ echo "mysqli_connect(): (HY000/2002): Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение." > q686819.txt
Полученный файл перегнал из UTF-8 в CP-1251 (она же windows-1251)
$ iconv -f utf-8 -t windows-1251 ./q686819.txt
mysqli_connect(): (HY000/2002): ����������� �� �����������, �.�. �������� ��������� ������ ������ �� �����������.
Консоль у меня отображает вывод в UTF-8, но выводимые символы имеют кодировку CP-1251
Отсюда можно сделать следующий полезный для вас вывод: исходный текст ваша сборка MySQL выводит в кодировке windows-1251 (скорее всего потому что собрана под Windows, а там в русской локализации по умолчанию именно windows-1251). А вопросики вы видите потому, что смотрите на символы через призму кодировку utf-8
Решение: либо поменять сборку MySQL на EN, без локализации на русском (возможно там в параметрах можно поменять LANG для ошибок или что-то вроде того - обычно такие пакеты делают мультиязычными, а язык выбирается из параметров ОС), либо ничего не менять и выводить в windows-1251 (как сейчас), но смотреть на это через призму той же кодировки windows-1251, например в .htaccess
AddDefaultCharset windows-1251
Попробуйте, тут нужны эксперименты именно с вашей сборкой и на Windows. К сожалению подробнее я вам не подскажу - пользуюсь Linux и обычными Apache httpd и mariadb из репозиториев. Но направление определенно верное
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты