Intereting Posts
Функция для дезинфекции входных значений PHP PHP MySQL Сортировать по нескольким столбцам Как переопределить не найденную страницу в CodeIgniter? Как передать данные textarea через ajax, который содержит амперсанды и / или разрывы строк? Как заставить проверенный валидатор Laravel добавлять ошибки в поле подтверждения? получить последний автоматический прирост php JavaScript в php-файле не работает при вызове php-файла с использованием Ajax Изменение размера изображения при загрузке MongoDB findOne не возвращает ничего PHP: 500 Ошибка для страницы с ошибкой Слияние MySQL Два поля из двух таблиц в одно поле в наборе результатов Как составить список уникальных элементов из столбца w / repeat в PHP SQL Множественная выборка PHP для вставки нескольких строк в MySQL Почему обращение к индексу массива по логическому значению не вызывает каких-либо ошибок? get_browser () в Chrome возвращает 'Default Browser'

Проблема кодирования (UTF-8) в PHP

Я хочу вывести следующую строку в PHP:

ä ö ü ß €

Поэтому я закодировал его в utf8 вручную:

ä ö ü ß  €

Итак, мой сценарий:

<?php header('content-type: text/html; charset=utf-8'); echo 'ä ö ü ß €'; ?> 

Первые 4 символа верны (ä ö ü ß), но, к сожалению, знак «E» неверен:

ä ö ü ß

Здесь вы можете это увидеть.

Можете ли вы сказать мне, что я сделал неправильно? Мой редактор (Notepad ++) имеет настройки для кодирования (Ansi / UTF-8) и Format (Windows / Unix). Нужно ли менять их?

Я надеюсь, что вы можете мне помочь. Заранее спасибо!

Этот последний символ просто не находится в файле (попробуйте просмотреть источник), поэтому вы его не видите.

Я думаю, вам лучше сэкономить файл PHP как UTF-8 (в Notepad ++ эти параметры доступны в формате -> Кодирование в UTF-8 без спецификации) и вставка фактических символов в ваш PHP-файл (то есть в Notepad ++) а не взламывать с вставкой Ã повсюду. Карта символов Windows может быть полезной для вставки символов Юникода.

Знак Euro (U + 20AC) кодируется в UTF-8 с тремя байтами, а не с двумя. Это можно увидеть здесь . Таким образом, ваша кодировка просто неверна.

Если вы хотите правильно вывести его на utf8, ваш скрипт должен быть:

 <?php header('content-type: text/html; charset=utf-8'); echo "\xc3\xa4"."\xc3\xb6"."\xc3\xbc"."\xc3\x9f"."\xe2\x82\xac"; ?> 

Таким образом, даже если ваш php-скрипт будет сохранен в кодировке не-utf-8, он все равно будет работать.

Вы всегда должны настроить редактор на ту же кодировку, что сгенерированный HTML указывает браузеру на использование. Если HTML-страницу должна интерпретироваться как UTF-8, тогда установите текстовый редактор в UTF-8. PHP полностью не знает настройки кодировки редактора, используемые для создания файла; он обрабатывает строки как поток байтов.

Другими словами, если в файле находятся правые байты, все будет работать. И самый простой способ обеспечить правильные байты в файле – это настроить кодировку на ту же самую, на которой должна находиться веб-страница. Все остальное просто усложняет жизнь, чем это должно быть.

Но лучшая защита заключается в том, чтобы полностью оставить символы, отличные от ASCII, из кода. Вы можете вытащить их из базы данных или файла локализации. Это означает, что код может быть модифицирован практически в любом редакторе, не беспокоясь о повреждении кодировки.

 header('Content-Type: text/html; charset=UTF-8'); 

Это просто информирует браузеры о том, какой контент вы собираетесь отправить и как он должен его обработать. Он не устанавливает кодировку фактического содержимого, которое вы отправляете. Это полностью зависит от вас, чтобы выполнить свое обещание. Ваш контент не будет волшебным образом преобразовываться из любого в UTF-8 только потому, что вы устанавливаете этот заголовок. Если вы скажете браузеру обрабатывать контент как UTF-8, но вы отправляете его закодированные данные Latin-1, конечно, он сломается.

Я отсылаю вас к тому, что каждый программист абсолютно, положительно должен знать о кодировках и наборах символов для работы с текстом

это сработало для меня

  if (mb_check_encoding($value, 'UTF-8')) { return $value = utf8_encode($value); } else { return $value; } 

Источник: https://github.com/jdorn/php-reports/issues/100