Сообщение из 50 символов было записано в 8-битной кодировке Windows 1251 после вставки

Обновлено: 21.11.2024

Познакомьтесь с Base64 Decode and Encode, простым онлайн-инструментом, который делает именно то, что говорит: декодирует из кодировки Base64, а также быстро и легко кодирует в нее. Base64 без проблем кодирует ваши данные или декодирует их в удобочитаемый формат.

Схемы кодирования Base64 обычно используются, когда необходимо кодировать двоичные данные, особенно когда эти данные необходимо хранить и передавать через носители, предназначенные для работы с текстом. Это кодирование помогает гарантировать, что данные останутся нетронутыми без изменений во время транспортировки. Base64 обычно используется в ряде приложений, включая электронную почту через MIME, а также для хранения сложных данных в XML или JSON.

  • Набор символов. В случае текстовых данных схема кодирования не содержит набор символов, поэтому необходимо указать, какой набор символов использовался в процессе кодирования. Обычно это UTF-8, но могут быть и многие другие; если вы не уверены, поэкспериментируйте с доступными вариантами или попробуйте вариант автоматического обнаружения. Эта информация используется для преобразования декодированных данных в набор символов нашего веб-сайта, чтобы все буквы и символы отображались правильно. Обратите внимание, что это не относится к файлам, поскольку к ним не нужно применять веб-безопасные преобразования.
  • Декодируйте каждую строку отдельно. Закодированные данные обычно состоят из непрерывного текста, поэтому даже символы новой строки преобразуются в их формы, закодированные в Base64. Перед декодированием из входных данных удаляются все незакодированные пробелы, чтобы защитить целостность входных данных. Этот параметр полезен, если вы собираетесь декодировать несколько независимых записей данных, разделенных разрывами строк.
  • Живой режим: когда вы включаете эту опцию, введенные данные немедленно декодируются с помощью встроенных функций JavaScript вашего браузера, без отправки какой-либо информации на наши серверы. В настоящее время этот режим поддерживает только набор символов UTF-8.

Абсолютно бесплатно

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

Подробности о кодировке Base64

Base64 – это общий термин для ряда похожих схем кодирования, которые кодируют двоичные данные, обрабатывая их в числовом виде и переводя в представление base-64. Термин Base64 происходит от конкретной кодировки передачи содержимого MIME.

Вот фрагмент цитаты из "Левиафана" Томаса Гоббса:

"Человек отличается не только своим разумом, но и . "

Это представлено в виде последовательности байтов ASCII и закодировано в схеме MIME Base64 следующим образом:

В приведенной выше цитате закодированное значение Man равно TWFu. Закодированные в ASCII буквы «M», «a» и «n» хранятся как байты 77, 97, 110, которые эквивалентны «01001101», «01100001» и «01101110» в базе-2. Эти три байта объединяются в 24-битном буфере, образуя двоичную последовательность «010011010110000101101110». Пакеты из 6 бит (6 бит имеют максимум 64 различных двоичных значения) преобразуются в 4 числа (24 = 4 * 6 бит), которые затем преобразуются в соответствующие значения в Base64.


Как показано в этом примере, кодировка Base64 преобразует 3 незакодированных байта (в данном случае символы ASCII) в 4 закодированных символа ASCII. Перейти на мобильную версию

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

G.1 Введение

Коллектор может отслеживать сетевой трафик, содержащий данные в различных стандартах кодирования. Полный список стандартов кодирования, поддерживаемых в настоящее время RUEI, показан в таблице G-1.

Таблица G-1 Поддерживаемые кодировки

GB_2312-80, gb2312, китайский

GBK, CP936, MS936, Windows-936

ISO-8859-1, ISO_8859-1, латиница1

Номер латинского алфавита. 1.

Номер латинского алфавита. 6 (скандинавский).

Номер латинского алфавита.7 (Балтийский край).

Номер латинского алфавита. 8 (кельтский).

Номер латинского алфавита. 9.

Номер латинского алфавита. 10 (юго-восточная Европа).

ISO-8859-2, ISO_8859-2, латиница2

Номер латинского алфавита. 2 (Центральная и Восточная Европа).

Номер латинского алфавита. 3 (южная Европа).

Номер латинского алфавита. 4 (Северная Европа).

Номер латинского алфавита. 5 (турецкий).

Американский стандартный код для обмена информацией (ASCII).

32-битный формат преобразования UCS. Также известен как UCS-4.

16-битный формат преобразования UCS, порядок байтов определяется необязательным знаком порядка байтов.

16-битный формат преобразования Unicode, обратный порядок байтов.

16-битный формат преобразования Unicode, обратный порядок байтов.

32-битный формат преобразования Unicode, обратный порядок байтов.

32-битный формат преобразования Unicode, обратный порядок байтов.

Microsoft Windows для Восточной Европы.

Microsoft Windows Кириллица (русская)

Microsoft Windows Latin.

Microsoft Windows Греческий.

Microsoft Windows на турецком языке.

Microsoft Windows, иврит.

Microsoft Windows, арабский язык.

Microsoft Windows Балтика.

Microsoft Windows на вьетнамском языке.

Примечание: кодировка веб-сайтов конкретного поставщика может не поддерживаться. Сетевой трафик, содержащий неподдерживаемую кодировку, по-прежнему записывается, но сопоставление может оказаться невозможным. Например, содержимое страницы по-прежнему можно просматривать в средстве просмотра повторов, но определенное имя страницы может быть неправильно связано с ним.

Конфигурация веб-сайта

Для правильного мониторинга многобайтового веб-сайта важно, чтобы веб-сайт был правильно настроен. Например, если его веб-сервер объявляет UTF-8, но фактические страницы не закодированы в UTF-8, RUEI не может правильно отслеживать их, даже если некоторые веб-браузеры могут автоматически обнаруживать и исправлять неподдерживаемое содержимое. Следовательно, такие функции, как функциональные ошибки и проверка содержимого, не будут корректно работать на этих страницах.

G.2 Вопросы реализации

Коллектор можно настроить таким образом, чтобы он не регистрировал конфиденциальную информацию. Это полностью описано в Разделе 8.3, «Слепая информация о пользователе». Поддерживаются только имена аргументов ASCII. Кодировка, используемая в содержимом аргумента, не имеет значения, поскольку она все равно заменяется (на "XXX").

Особое внимание следует уделять именам переменных, которые содержат символ доллара ($). Например, foo$bar может передаваться в отслеживаемом трафике как foo%24bar (это зависит от браузера). В этом случае для корректного ослепления этой переменной необходимо указать имя переменной в процентном кодировании.

Учтите, что переменные, которые необходимо замаскировать, должны быть указаны в формате ASCII и указаны точно так, как они сообщаются в средстве диагностики сеанса. Например, имя пользователя имени переменной будет отображаться с помощью средства диагностики сеанса как user%20name , но также может отображаться как user+name . Следовательно, для ослепления должны быть указаны оба имени переменных.

Если имя аргумента содержит символы, отличные от ASCII, следует использовать средство диагностики сеанса (описанное в Разделе 3.9, «Работа со средством диагностики сеанса»), чтобы увидеть, как оно сообщается, и указать это сообщаемое имя в качестве переменной. быть ослепленным. Кроме того, вы должны регулярно проверять файлы журналов, чтобы убедиться, что данные корректно скрыты.

Обратите внимание, что ограничения и требования, описанные выше для ослепления аргументов URL, также применимы к любой ситуации, в которой вам нужен прямой доступ к аргументу URL. Например, специальные параметры или определения приложений.

Пользовательские заголовки и файлы cookie

Сопоставление идентификатора пользователя

Поскольку аргумент URL представляет собой комбинацию имя = значение, часть имени указывается как исходный аргумент, из которого будет считываться идентификатор пользователя. Часть значения извлекается и сообщается как идентификатор пользователя. На указанный исходный аргумент распространяются те же требования, которые объяснялись ранее для маскирования данных. Однако часть значения комбинации может быть указана в любой поддерживаемой кодировке. RUEI пытается преобразовать значение из своей собственной кодировки (например, Shift-JIS) в UTF-8, чтобы его можно было отобразить в пользовательском интерфейсе на родном языке (например, японском).

Однако, если исходная кодировка значения неизвестна, идентификатор пользователя не может быть правильно отображен в пользовательском интерфейсе, и сообщаемое значение искажается. Из-за ограничений протокола HTTP идентификаторы пользователей на некоторых веб-сайтах могут отображаться не так, как ожидалось. В этом случае рекомендуется указать резервную кодировку, которую следует использовать. Это полностью объясняется в Разделе 9.3, «Указание кодировки резервного коллектора». Обратите внимание, что кодировка, указанная для этого параметра, применима только к аргументам URL и POST. Этот параметр не влияет на отчеты на основе содержимого (например, функциональные ошибки).Поскольку это не гарантирует правильного отображения всех значений, вам также следует просмотреть определения веб-сайтов и убедиться, что все идентификаторы пользователей указаны только в кодировке ASCII.

G.3 Определение проверок содержания

Учтите, что при указании проверок содержимого страницы содержимое, отображаемое в клиентском браузере (и видимое конечным пользователем), может отличаться от основного источника HTML-страницы. Это связано с базовыми тегами шрифта, формата и ссылки, а также с определениями сущностей и т. д. Следовательно, простое копирование и вставка части текста с отображаемой страницы в клиентском браузере не всегда работает должным образом.

Обычно эту проблему можно решить путем копирования и вставки из средства просмотра исходного кода в клиентском браузере. Однако для страниц, использующих кодировку, отличную от UTF-8, этот подход не работает, если ваш браузер Internet Explorer 6 или 7. Причина этого в том, что IE использует Notepad в качестве средства просмотра исходного кода, который поддерживает только UTF-8. В результате исходный код может выглядеть искаженным, и его нельзя будет осмысленно скопировать и вставить в RUEI.

Поскольку Mozilla Firefox использует внутренний инструмент рендеринга исходного HTML-кода, он всегда может точно отображать исходный код HML, даже для кодировок, отличных от UTF-8. Поэтому рекомендуется использовать этот браузер в качестве основы для проверки содержимого и всякий раз, когда требуется точное воспроизведение исходного HTML-кода.

Эта функция преобразует строку string из кодировки UTF-8 в кодировку ISO-8859-1 . Байты в строке, которые не являются допустимыми UTF-8, и символы UTF-8, которые не существуют в ISO-8859-1 (то есть символы выше U+00FF), заменяются на ? .

Примечание.

Многие веб-страницы, помеченные как использующие кодировку символов ISO-8859-1, на самом деле используют аналогичную кодировку Windows-1252, и веб-браузеры интерпретируют веб-страницы ISO-8859-1 как Windows-1252. . Windows-1252 содержит дополнительные печатные символы, такие как знак евро (€) и фигурные кавычки ( " "), вместо некоторых управляющих символов ISO-8859-1. Эта функция не будет правильно преобразовывать такие символы Windows-1252. Используйте другую функцию, если требуется преобразование Windows-1252.

Параметры

Строка в кодировке UTF-8.

Возвращаемые значения

Возвращает перевод строки в формате ISO-8859-1 .

Журнал изменений

Текстовое содержимое M a n
ASCII 77 97 110
Битовый шаблон 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Индекс 19 22 5 46
в кодировке Base64 T W F u
< td>Эта функция была перенесена в ядро ​​PHP, и, следовательно, снимается требование к расширению XML, чтобы эта функция была доступна.
Версия Описание
7.2.0

См. также

  • utf8_encode() — кодирует строку ISO-8859-1 в UTF-8 — выполняет обратное преобразование
  • mb_convert_encoding() — преобразование кодировки символов – преобразование между различными кодировками символов, включая UTF-8, ISO-8859-1 и Windows-1252.
  • iconv() – Преобразование строки в запрошенную кодировку – Преобразование между различными кодировками символов.
  • recode_string() — перекодировать строку в соответствии с запросом на перекодирование — конвертирует между различными кодировками символов

Пользовательские заметки 32 заметки

Если вы хотите извлечь некоторые данные UTF-8 из своей базы данных, вам не нужна utf8_decode().

Просто выполните следующий запрос перед любым SELECT :

$result = mysql_query("УСТАНОВИТЬ ИМЕНА utf8");

ВАЖНО: при преобразовании данных UTF8, содержащих знак EURO, НЕ ИСПОЛЬЗУЙТЕ функцию utf_decode.

utf_decode преобразует данные в кодировку ISO-8859-1. Но кодировка ISO-8859-1 не содержит знака EURO, поэтому знак EURO будет преобразован в знак вопроса '?'

Для правильного преобразования данных UTF8 со знаком EURO необходимо использовать:

icon("UTF-8", "CP1252", $data)

Обратите внимание, что utf8_decode просто преобразует строку, закодированную в UTF-8, в ISO-8859-1. Более подходящим именем для него было бы utf8_to_iso88591. Если ваш текст уже закодирован в ISO-8859-1, вам не нужна эта функция. Если вы не хотите использовать ISO-8859-1, эта функция вам не нужна.

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

Если вам нужно преобразовать какой-либо текст из любой кодировки в любую другую кодировку, вместо этого используйте iconv().

Предпочтительнее использовать это в массиве со встроенной функцией PHP "array_map()", например:
$array = array_map("utf8_decode", $array);

Если у вас не установлено многобайтовое расширение, вот функция для декодирования строк в кодировке UTF-16. Он поддерживает как строки без спецификации, так и строки со спецификацией (порядок байтов с прямым и прямым порядком байтов).

/**
* Декодировать строки в кодировке UTF-16.
*
* Может обрабатывать как данные со спецификацией, так и данные без спецификации.
* Предполагается порядок байтов с обратным порядком байтов, если спецификация недоступна.
*
* @param string $str Данные в кодировке UTF-16 для декодирования.
* @return string Данные в кодировке UTF-8/ISO.
* @access public
* @version 0.1 / 19 января 2005 г.
* @author Rasmus Andersson
* @package Groupies
*/
функция utf16_decode ($str) if(strlen ($str) 2) return $str;
$bom_be = true ;
$c0 = ord ( $str < 0 >);
$c1 = ord ( $str < 1 >);
if( $c0 == 0xfe && $c1 == 0xff ) < $str = substr ( $str , 2 ); >
elseif( $c0 == 0xff && $c1 == 0xfe ) < $str = substr ( $str , 2 ); $bom_be = ложь; >
$len = strlen ( $str );
$newstr = '' ;
for( $i = 0 ; $i $len ; $i += 2 ) if( $bom_be ) < $val = ord ( $str < $i >) 4 ; $val += ord ($str < $i + 1 >); >
else < $val = ord ( $str < $i + 1 >) 4 ; $val += ord ( $str < $i >); >
$newstr .= ( $val == 0x228 ) ? "\n": chr ($val);
>
вернуть $newstr ;
>
?>

Только для польских букв:

функция utf16_2_utf8 ($nowytekst) $nowytekst = str_replace ('%u0104', 'Ą', $nowytekst); //
$nowytekst = str_replace ('%u0106', 'Ć', $nowytekst); //
$nowytekst = str_replace ('%u0118', 'Ę', $nowytekst); //Ę
$nowytekst = str_replace ('%u0141', 'Ł', $nowytekst); //Ł
$nowytekst = str_replace ('%u0143', 'Ń', $nowytekst); //Ń
$nowytekst = str_replace ('%u00D3', 'Ó', $nowytekst); //Ó
$nowytekst = str_replace ('%u015A', 'Ś', $nowytekst); //Ś
$nowytekst = str_replace ('%u0179', 'Ź', $nowytekst); //Ź
$nowytekst = str_replace ('%u017B', 'Ż', $nowytekst); //Ż

$nowytekst = str_replace ('%u0105', '±', $nowytekst); //±
$nowytekst = str_replace ('%u0107', 'ć', $nowytekst); //ć
$nowytekst = str_replace ('%u0119', 'ę', $nowytekst); //ę
$nowytekst = str_replace ('%u0142', 'ł', $nowytekst); //ł
$nowytekst = str_replace ('%u0144', 'ń', $nowytekst); //ń
$nowytekst = str_replace ('%u00F3', 'ó', $nowytekst); //ó
$nowytekst = str_replace ('%u015B', 'ś', $nowytekst); //ś
$nowytekst = str_replace ('%u017A', 'ź', $nowytekst); //ź
$nowytekst = str_replace ('%u017C', 'ż', $nowytekst); //ż
возврат ( $nowytekst );
>
?>

Все идет гладко, но не меняет '%u00D3','Ó' и '%u00F3','ó'. Я понятия не имею, что с этим делать.

Помните! Файл должен быть сохранен в кодировке UTF-8.

функция utf2iso ($tekst)
$nowytekst = str_replace ("%u0104", "\xA1", $tekst); //
$nowytekst = str_replace ("%u0106", "\xC6", $nowytekst); //
$nowytekst = str_replace ("%u0118", "\xCA", $nowytekst); //Ę
$nowytekst = str_replace("%u0141" , "\xA3" , $nowytekst ); //Ł
$nowytekst = str_replace ("%u0143", "\xD1", $nowytekst); //Ń
$nowytekst = str_replace ("%u00D3", "\xD3", $nowytekst); //Ó
$nowytekst = str_replace ("%u015A", "\xA6", $nowytekst); //Ś
$nowytekst = str_replace ("%u0179", "\xAC", $nowytekst); //Ź
$nowytekst = str_replace ("%u017B", "\xAF", $nowytekst); //Ż

$nowytekst = str_replace ("%u0105", "\xB1", $nowytekst); //±
$nowytekst = str_replace ("%u0107", "\xE6", $nowytekst); //ć
$nowytekst = str_replace ("%u0119", "\xEA", $nowytekst); //ę
$nowytekst = str_replace("%u0142" , "\xB3" , $nowytekst ); //ł
$nowytekst = str_replace ("%u0144", "\xF1", $nowytekst); //ń
$nowytekst = str_replace ("%u00D4", "\xF3", $nowytekst); //ó
$nowytekst = str_replace ("%u015B", "\xB6", $nowytekst); //ś
$nowytekst = str_replace ("%u017A", "\xBC", $nowytekst); //ź
$nowytekst = str_replace ("%u017C", "\xBF", $nowytekst); //ż

return ( $nowytekst );
>
?>

В моем случае также файл кода, который обрабатывает вызовы AJAX, должен быть в кодировке UTF-8.

Помимо примечания yannikh из gmeil dot com, есть еще один способ декодирования строк с нелатинскими символами из консоли unix, например

Мне было недостаточно использования utf8_decode для получения содержимого страницы с другого сайта. Проблема возникает из-за того, что алфавит отличается от стандартной латиницы. Например, некоторые символы (соответствующие HTML-кодам „ и другим) преобразуются в "?" или "xA0" (шестнадцатеричное значение). Вам нужно сделать некоторое преобразование, прежде чем выполнять utf8_decode. И вы не можете заменить просто, что они могут быть частью 2-байтового кода для символа (UTF-8 использует 2 байта). Следующее для кириллицы, но для остальных должно быть очень близко.

Обновление ответа от okx dot Oliver Dot Koenig из gmail dot com для PHP 5.6, так как модификатор e/ устарел

// Это, наконец, помогло мне выполнить работу, благодаря Blackbit, пришлось изменить устаревший ereg:
// исходный комментарий: "Squirrelmail содержит в исходниках хорошую функцию для преобразования юникода в сущности:"< /p>

// Это, наконец, помогло мне выполнить работу, благодаря Blackbit, пришлось изменить устаревший ereg:
// исходный комментарий: "Squirrelmail содержит в исходниках хорошую функцию для преобразования юникода в сущности:"< /p>

Помимо примечания Янниха, для преобразования шестнадцатеричной строки utf8

echo utf8_decode ("\x61\xc3\xb6\x61");
// работает как положено

$abc = "61c3b661" ;
$newstr = "" ;
$l = strlen ( $abc );
для ( $i = 0 ; $i $l ; $i += 2 ) $newstr .= "\x" . $abc[$i]. $abc [ $i + 1 ];
>
echo utf8_decode ( $newstr );
// или варианты "\x": "\\x" и т. д. НЕ выводят то, что вы хотите

echo utf8_decode (pack('H*', $abc));
// это выводит правильную строку, как и первая строка.

Squirrelmail содержит в исходниках замечательную функцию для преобразования юникода в сущности:

= "Åäö" ;
echo iconv ("UTF-8", "ISO-8859-1", $myUnicodeString);
?>

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

Еще одно решение проблемы неправильно отображаемых глифов — просто отправить документ в кодировке UTF-8 и, конечно же, отправить данные в кодировке UTF-8:

Если вы используете Gentoo Linux и столкнулись с проблемами в некоторых приложениях PHP4, говорящих:
Вызов неопределенной функции: utf8_decode()
Попробуйте повторно загрузить PHP4 с включенным флагом 'expat'.

Я заметил, что приведенные ниже функции преобразования utf-8 в html предназначены только для кодов длиной 2 байта. Ну, я хотел поддержку 3 байта (извините, не сделал 4, 5 или 6). Также я заметил, что конкатенация кодов символов имеет шестнадцатеричный префикс 0x и поэтому не работает с большими 2-байтовыми кодами)

Я только что создал этот фрагмент кода, чтобы улучшить настраиваемые пользователем электронные письма, отправляемые одним из моих веб-сайтов.

Цель заключалась в том, чтобы использовать UTF-8 (Unicode), чтобы пользователи, не владеющие английским языком, могли пользоваться всеми преимуществами Unicode, НО также упростить жизнь для англоязычных пользователей (или, в частности, для англоязычных пользователей MS-Outlook). Недостаток: Outlook до 2003 года (?) неправильно определяет электронные письма в формате Unicode. Когда «умные кавычки» из MS Word были вставлены в область форматированного текста и сохранены в Unicode, а затем отправлены по электронной почте пользователю Outlook, чаще всего эти символы ошибочно отображались как «греческие».

Вот краткое изложение результатов:

201 строка является допустимой строкой UTF8 с использованием регулярного выражения phpnote
203 строки является допустимой строкой UTF8 с использованием регулярного выражения j.dittmer
200 строк является допустимой строкой UTF8 с использованием регулярного выражения fhoech
239 строк является допустимой строкой UTF8 используя использование mb_detect_encoding

Вот строки с различиями (слева направо, phpnote, j.dittmer и fhoech):

Интересно, что вы сказали, что ваше регулярное выражение исправляет регулярное выражение j.dittmer, которое не удалось в разделе 5.3, но в моем тесте у меня противоположный результат?!

Я провел этот тест на Windows XP с PHP 4.3.11dev. Возможно, эти различия связаны с операционной системой или версией PHP.

Для mb_detect_encoding я использовал команду:

mb_detect_encoding($line, 'UTF-8, ISO-8859-1, ASCII');

Следующий код помог мне со смешанными кодировками (UTF8+ISO-8859-1(x)). В этом случае у меня есть файлы шаблонов, созданные и поддерживаемые дизайнерами, которые не заботятся о кодировке и данных MySQL в таблицах с кодировкой utf8_binary_ci.

Вспомогательная функция класса
функция strSplit ( $text , $split = 1 )
if (! is_string ( $ text )) return false ;
if (! is_numeric ($split) && $split 1) вернуть false;

$len = strlen ( $text );

в то время как ( $i $len )
$key = NULL ;

for ( $j = 0 ; $j $split ; $j += 1 )
$key .= $text < $i >;

$replace = массив();
$replace [] = 'Помощник::_UTF8ToHTML("\\1")' ;
$replace [] = "ä" ;
$replace [] = "ö" ;
$replace [] = "ü" ;
$replace [] = "Ä" ;
$replace [] = "Ö" ;
$replace [] = "ü" ;
$replace [] = "ß" ;

$str = preg_replace ($search, $replace, $str);

функция _UTF8ToHTML ($str)
$ret = 0;

$tpl = file_get_contents ("template.tpl");
/* . */
$row = mysql_fetch_assoc ($result);

print( Helper :: UTF8ToHTML ( str_replace ("" , $row [ 'var' ], $tpl )));

ЭЙ! ошибка не в функции 'utf8_decode'. Ошибка в функции 'mb_detect_encoding'. Если вы поместите слово со специальным символом в конце, например, «accentué», это приведет к неправильному результату (UTF-8), но если вы поместите в конце еще один символ, например, «accentuée», вы получите правильный результат. Поэтому вы всегда должны добавлять в строку символ ISO-8859-1 для этой проверки. Я советую использовать пустое пространство.
Я пробовал, и это работает!

функция ISO_convert($array)
$array_temp = array();

foreach($array as $name => $value)
if(is_array($value))
$array_temp[(mb_detect_encoding($name." ",'UTF-8,ISO- 8859-1') == 'UTF-8' utf8_decode($name): $name )] = ISO_convert($value);
else
$array_temp[(mb_detect_encoding($name." ",'UTF-8,ISO-8859-1') == 'UTF-8' ?utf8_decode($name): $name)] = (mb_detect_encoding($value." ",'UTF-8,ISO-8859-1') == 'UTF-8' ? utf8_decode($value) : $value);
>

простое преобразование UTF-8 в HTML:

функция utf8_to_html ($data)
return preg_replace("/([\\xC0-\\xF7][\\x80-\\xBF]+)/e", '_utf8_to_html("\\1 ")', $данные);
>

В регулярном выражении в последнем комментарии есть опечатки. Это
синтаксически верное выражение, но я не уверен, что оно правильное.
Вы должны объединить выражение в одну длинную строку.

Если вы точно не знаете, сколько раз кодируется ваша строка, вы можете использовать эту функцию:

функция _utf8_decode ($string)
$tmp = $string;
$count = 0 ;
в то время как ( mb_detect_encoding ( $ tmp ) == "UTF-8" )
$ tmp = utf8_decode ( $ tmp );
$count++;
>

for ( $i = 0 ; $i $count - 1 ; $i ++)
$string = utf8_decode ( $string );

небольшое обновление для польского декодирования:

функция utf82iso88592($text) $text = str_replace("\xC4\x85", '±', $text);
$text = str_replace("\xC4\x84", 'Ą', $text);
$text = str_replace("\xC4\x87", 'ć', $text);
$text = str_replace("\xC4\x86", 'Ć', $text);
$text = str_replace("\xC4\x99", 'ę', $text);
$text = str_replace("\xC4\x98", 'Ę', $text);
$text = str_replace("\xC5\x82", 'ł', $text);
$text = str_replace("\xC5\x81", 'Ł', $text);
$text = str_replace("\xC3\xB3", 'ó', $text);
$text = str_replace("\xC3\x93", 'Ó', $text);
$text = str_replace("\xC5\x9B", 'ś', $text);
$text = str_replace("\xC5\x9A", 'Ś', $text);
$text = str_replace("\xC5\xBC", 'ż', $text);
$text = str_replace("\xC5\xBB", 'Ż', $text);
$text = str_replace("\xC5\xBA", 'ż', $text);
$text = str_replace("\xC5\xB9", 'Ż', $text);
$text = str_replace("\xc5\x84", 'ń', $text);
$text = str_replace("\xc5\x83", 'Ń', $text);

возврат $text;
> // utf82iso88592

Мне пришлось решить очень интересную задачу:

Я хотел заменить все \xXX в тексте на их буквы. К сожалению, XX были ASCII, а не utf8. Я решил свою проблему так:
( '/\\\\x([0-9a-fA-F])/e' , "pack('H*',utf8_decode('\\1') )", $v); ?>

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

функция urlize ( $url ) <
$search = array( '/[^a-z0-9]/' , '/--+/' , '/^-+/' , '/ -+$/');
$replace = array('-', '-', '', '');
возврат preg_replace ($search, $replace, utf2ascii ($url));
>

функция utf2ascii ($string) <
$iso88591 = "\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7" ;
$iso88591 .= "\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF" ;
$iso88591 .= "\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7" ;
$iso88591 .= "\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF" ;
$ ascii = "AAAAAACEEEEEIIDNOOOOOOOUUUUUYYY";
return strtr(mb_strtolower(utf8_decode($string), 'ISO-8859-1'), $iso88591, $ascii);
>

Сегодня мы хотели бы ответить на самые частые вопросы о кодировках файлов в IDE и показать вам несколько приемов, которые могут помочь вам избежать потенциальных ловушек.

В чем проблема с кодировками файлов?

Чтобы правильно отображать текст, IntelliJ IDEA необходимо знать, какую кодировку файла использовать. К сожалению, не всегда можно определить кодировку файла без дополнительной информации. Возможно несколько сопоставлений, особенно при использовании однобайтовых кодировок.

Однако с кодировками семейства UTF дела обстоят лучше. Семейство UTF состоит из:

  • Несколько многобайтовых кодировок, таких как UTF-16 или UTF-32, которые легко обнаружить по слову BOM (знак порядка байтов) в начале файла.
  • Кодировка UTF-8 с переменным количеством байтов на символ, которая также может автоматически определяться либо с помощью необязательной спецификации, либо с помощью определенных комбинаций байтов.

В частности, для подмножества английских символов файл в кодировке UTF-8 выглядит точно так же, как старый обычный текст ASCII. Вот почему UTF-8 так популярен, и вот почему это самая предпочтительная кодировка.

Как IDE определяет кодировку файла?

IntelliJ IDEA использует многоэтапное обоснованное предположение, от самых очевидных до запутанных.

Во-первых, при наличии спецификации используйте соответствующую кодировку семейства UTF. Проверьте, объявляет ли тип файла саму кодировку, и используйте ее. Например, файлы JSP могут указывать кодировку прямо в тексте:

Проверьте, указали ли вы кодировку явно, и используйте ее. Вы можете указать желаемую кодировку для файла или для содержащего его каталога, или для всего проекта, или для IDE.IntelliJ IDEA будет использовать наиболее конкретную кодировку:

Наконец, используйте кодировку на уровне проекта или, если проект недоступен, кодировку на уровне приложения.
См. раздел Настройки → Кодировка файла → Кодировка проекта → Кодировка IDE.

Что происходит, когда я пытаюсь изменить кодировку файла?

Если кодировки файлов полностью совместимы для этого текста, например. при изменении текста английских символов с US_ASCII на UTF-8 IntelliJ IDEA просто автоматически переназначает кодировку.

Однако, если кодировки существенно различаются, IDE должна спросить вас:

  • Хотите ли вы перезагрузить файл с диска в другой кодировке.
    В этом случае IDEA заменит редактор текстом из файла, декодированного в новой кодировке.
  • Или вы хотите преобразовать текст в редакторе в файл, используя другую кодировку.
    Здесь IDEA закодирует текст в окне редактора, используя новую кодировку, и перезапишет файл.

Обратите внимание на эти маленькие серые восклицательные знаки, означающие, что конкретное преобразование/перезагрузка может привести к потере информации.

Например, когда вы пытаетесь перезагрузить файл в кодировке UTF-8 с кодировкой US-ASCII, в процессе теряются неанглийские символы.

Или когда вы пытаетесь сохранить немецкие умлауты в обычный текстовый файл ISO-8859-1.

Что еще IntelliJ IDEA может сделать для меня?

IntelliJ IDEA предупредит вас, если вы попытаетесь произнести нецензурную брань на немецком языке в документе, состоящем только из ASCII:

Чтобы включить эту проверку, выберите Настройки > Проверка > Кодирование с потерями.

Аналогичным образом IntelliJ IDEA попытается обнаружить ситуацию, когда вы загружаете закодированный текст с несовместимой кодировкой:

Какой главный совет вы можете дать по кодировке файлов?

Чтобы избежать проблем с кодировкой файлов, мы настоятельно рекомендуем использовать UTF-8.

Читайте также: