Я публикую это как ответ, потому что мне нужны полные возможности форматирования обычного поля ответа.
Да, это UTF-8, все в порядке.Из интерактивного приглашения PHP:
php > $david = urldecode('David%A0Amess');
php > echo json_encode($david);
null
php > $david = urldecode('David%20Amess');
php > echo json_encode($david);
"David Amess"
php > $david = urldecode('David%c2%a0Amess');
php > echo json_encode($david);
"David\u00a0Amess"
Итак, мы можем предположить , что вы имеете дело с либо ISO-8859 или Windows-1252, учитывая, что мы имеем делосо сломанным NBSP. Мы можем исправить это с помощью iconv
:
php > $david = urldecode('David%A0Amess');
php > $david_converted = iconv('Windows-1252', 'UTF-8', $david);
php > echo json_encode($david_converted);
"David\u00a0Amess"
Итак, это означает, что вам нужно будет не доверять что вы вытаскиваете из MySQL, предполагая, что вы сделали SET NAMES
.Очевидно, что-то пошло не так, когда вы вставляли данные.Вы, вероятно, не давали MySQL правильно сформированный UTF-8, и он тупо не жаловался.(Если бы вы использовали другие, более умные, более правильные базы данных и попытались вставить незакодированный NBSP, они бы отклонили ввод.)