Intereting Posts
Почему XHP может изменить синтаксис PHP и все же быть полностью реализована как расширение? PHP: Шифрование / Расшифровка короткой строки Как предотвратить сканирование в зависимости от XPath от содержимого страниц Запуск ImageMagick на XAMPP 1.8.3 с Windows 7 Есть ли что-то вроде DBForge от Code Igniter для C #? Как визуализировать javascript с другого сайта, внутри приложения PHP? Файл Ajax / Flash загружается с индикатором выполнения? ajax вызов php не работает должным образом Фотографии import facebook-php-sdk не работают Регулярное выражение не работает должным образом с турецкими персонажами Как автоматически изменить размер DIV с помощью CSS, сохраняя соотношение сторон? Smarty не выбирает правильные шаблоны для отображения Нужна помощь в преобразовании кода SOAP PHP в Groovy с использованием groovy-wslite Можно ли запустить задачу «symfony doctrine build -all» только на одной таблице? mysql_num_fields (): предоставленный аргумент не является допустимым ресурсом результата MySQL

PHP-взаимодействие с кодировкой HTML Charset

У меня есть эта очень странная проблема. У меня есть сайт, содержащий несколько немецких букв, и когда это только html без php, символы отображаются с кодировкой, когда я меняю его на UTF-8, они не отображают, а вместо … я получаю . Когда я помещаю html внутри php и запускаю его с помощью студии Zend на Wamp с кодировкой charset = iso-8859-1, я получаю � вместо Ö (я хочу добавить, что это то же самое … является значением переключателя) , Когда он находится в

тег отображается правильно. Можете ли вы рассказать мне, как исправить эту проблему. Я смотрю на другие сайты, и они кодируют UTF-8 и правильно отображают один и тот же символ. Я попытался изменить кодировку php edior, но это не имеет значения, я полагаю -> все правильно отображается внутри редактора Zend Studio … Спасибо заранее.

Вы, вероятно, пришли, чтобы смешивать типы кодирования. Например. Страница, которая отправляется как iso-8859-1, но получает кодировку UTF-8 из MySQL или XML, как правило, терпит неудачу.

Чтобы решить эту проблему, вы должны сохранить контроль над типом входных ecodings в зависимости от типа кодировки, которую вы выбрали для использования внутри.

Если вы отправляете его как iso-8859-1, ваш ввод от пользователя также iso-8859-1.

 header("Content-type:text/html; charset: iso-8859-1"); 

И если mysql отправляет latin1, вам не нужно ничего делать.

Но если ваш вход не iso-8859-1, вы должны его преобразовать, прежде чем он отправит пользователю или адаптирует его к Mysql до его хранения.

 mb_convert_encoding($text, mb_internal_encoding(), 'UTF-8'); // If it's UTF-8 to internal encoding 

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


Это внутренняя кодировка, которую я выбрал использовать.

 mb_internal_encoding('iso-8859-1'); // Internal encoding 

Это код, который я использую.

 mb_language('uni'); // Mail encoding mb_internal_encoding('iso-8859-1'); // Internal encoding mb_http_output('pass'); // Skip function convert_encoding($text, $from_code='', $to_code='') { if (empty($from_code)) { $from_code = mb_detect_encoding($text, 'auto'); if ($from_code == 'ASCII') { $from_code = 'iso-8859-1'; } } if (empty($to_code)) { return mb_convert_encoding($text, mb_internal_encoding(), $from_code); } return mb_convert_encoding($text, $to_code, $from_code); } function encoding_html($text, $code='') { if (empty($code)) { return htmlentities($text, ENT_NOQUOTES, mb_internal_encoding()); } return mb_convert_encoding(htmlentities($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code); } function decoding_html($text, $code='') { if (empty($code)) { return html_entity_decode($text, ENT_NOQUOTES, mb_internal_encoding()); } return mb_convert_encoding(html_entity_decode($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code); } 

Вы можете проверить, что является значением заголовка HTTP-заголовка в заголовках ответов. Хотя информация старая (2009), я не знаю, сохранилась ли она: кодировка по умолчанию в PHP – это UTF-8, если вы не предоставляете заголовок типа содержимого с кодировкой. Источник

Следовательно, явно задайте заголовок:

 header("Content-type:text/html; charset: iso-8859-1"); 

Обновлено Мне нужно, чтобы мой кодированный / декодированный текст был несовместим.

Когда вы находитесь в PHP, попробуйте декодировать строку в UTF-8 перед выходом.

 $str = 'I ãm UTF-8'; echo(utf8_decode($str)); 

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

 <?php $str = 'I ãm UTF-8: ÖMG!'; ?> Test: <input type = 'text' value = '<?php echo(htmlspecialchars(utf8_decode($str))); ?>'> 

Значение в входе (через Cut n Paste):

Я ãm UTF-8: ÖMG!

Почему бы вам не использовать

 &Ouml; 

вместо вашего …?