преобразовать строку в utf 8 php
PHP: конвертировать любую строку в UTF-8 без знания исходного набора символов или, по крайней мере, попробовать
У меня есть приложение, которое касается клиентов со всего мира, и, естественно, я хочу, чтобы все, что попадало в мои базы данных, кодировалось в кодировке UTF-8.
Основная проблема для меня в том, что я не знаю, какая кодировка источника любой строки будет – она может быть из текстового поля (использование полезно, только если пользователь фактически отправил форму), или это может быть из загруженного текстового файла, поэтому я действительно не контролирую ввод.
Для загрузки файлов мне нравится идея попросить конечного пользователя указать кодировку, которую они используют, и показать им предварительный просмотр того, как будет выглядеть вывод, но это не помогает против неприятных хакеров (на самом деле это может сделать их жизнь немного легче).
Я прочитал другие вопросы SO по этому вопросу, но они, похоже, имеют тонкие различия, такие как «Мне нужно разобрать RSS-каналы» или «Я удаляю данные с веб-сайтов» (или, действительно, «Вы не можете»).
То, о чем вы просите, чрезвычайно сложно. Если возможно, то лучше всего задать пользователю кодировку. Предотвращение атаки не должно быть намного проще или сложнее.
Однако вы можете попробовать:
Установка строгого значения может помочь вам получить лучший результат.
В родине России у нас есть 4 популярных кодировки, поэтому ваш вопрос здесь востребован.
Единственный способ работать с неизвестными кодировками – работать с вероятностями. Итак, мы не хотим отвечать на вопрос «что такое кодирование этого текста?», Мы пытаемся понять, « что, скорее всего, кодирует этот текст? ».
Один парень в популярном российском технологическом блоге изобрел такой подход:
Постройте диапазон вероятностей кодов символов в каждой кодировке, которую вы хотите поддерживать. Вы можете построить его, используя некоторые большие тексты на вашем языке (например, какую-нибудь фикцию, используйте Шекспир для английского и Толстого для русского, lol). Вы получите что-то вроде этого:
Следующий. Вы берете текст в неизвестной кодировке и для каждой кодировки в вашем «вероятностном словаре» вы ищете частоту каждого символа в тексте с неизвестным кодированием. Суммарная вероятность символов. Кодирование с большим рейтингом, вероятно, является победителем. Лучшие результаты для больших текстов.
Btw. mb_detect_encoding certanly не работает. Да, вообще. Пожалуйста, посмотрите исходный код mb_detect_encoding в «ext / mbstring / libmbfl / mbfl / mbfl_ident.c».
Вероятно, вы пробовали это, но почему бы просто не использовать функцию mb_convert_encoding? Он попытается автоматически определить набор символов предоставленного текста или передать ему список.
Кроме того, я попытался запустить:
и результаты одинаковы для обоих. Как вы видите, что ваш текст усечен до ‘fianc’? это в БД или в браузере?
Невозможно идентифицировать кодировку строки, которая является полностью точной. Есть способы попытаться угадать кодировку. Один из этих способов и, вероятно, / в настоящее время лучший в PHP, это mb_detect_encoding (). Это сканирует вашу строку и ищет вхождения вещей, уникальных для определенных кодировок. В зависимости от вашей строки не может быть таких различимых случаев.
Есть только несколько разных персонажей, и, чтобы ухудшить их, они представлены теми же байтами. Невозможно обнаружить, получив строку, не зная, что это кодировка, должен ли байт 0xA4 обозначать ¤ или € в вашей строке, поэтому нет способа узнать, что это точная кодировка.
(Примечание: вы могли бы добавить человеческий фактор или еще более совершенную технологию сканирования (например, что предлагает Oroboros102), чтобы попытаться выяснить, основываясь на окружающем контексте, если персонаж должен быть ¤ или €, хотя это похоже на мост очень далеко)
Есть более различимые различия между UTF-8 и ISO-8859-1, поэтому все равно стоит попытаться понять это, когда вы не уверены, хотя вы можете и не должны полагаться на то, что это правильно.
Вместо того, чтобы пытаться автоматически угадать кодировку, вы должны сначала попытаться обеспечить определенную кодировку самостоятельно, когда это возможно, или попытаться получить определение из источника, из которого вы его получаете (если применимо), прежде чем прибегать к обнаружению.
Основная проблема для меня в том, что я не знаю, какая кодировка будет источником любой строки – она может быть из текстового поля (использование полезно только в том случае, если пользователь действительно отправил форму), или это может быть из загруженного текстового файла, поэтому я действительно не контролирую ввод.
Я не думаю, что это проблема. Приложение знает источник ввода. Если это из формы, используйте кодировку UTF-8 в вашем случае. Это работает. Просто убедитесь, что предоставленные данные правильно закодированы (проверка). Имейте в виду, что не все базы данных поддерживают UTF-8 в полном объеме.
Если это файл, вы не сохраните его в кодировке UTF-8 в базе данных, а в двоичной форме. Когда вы снова выводите файл, используйте также двоичный вывод, тогда это полностью прозрачно.
Ваша идея хорошая, что пользователь может сказать кодировку, если он / она все равно сможет сказать, загрузив файл, так как он двоичный.
Поэтому я должен признать, что я не вижу конкретной проблемы, которую вы поднимаете с вашим вопросом. Но, возможно, вы можете добавить несколько подробностей о вашей проблеме.
Вы можете настроить набор показателей, чтобы попытаться угадать, какая кодировка используется. Опять же, не идеально, но может уловить некоторые промахи от mb_detect_encoding ().
enca также появился здесь: как найти кодировку файла в Unix с помощью скрипта (ов)
Грим, есть действительно хорошие ответы и попытки ответить на ваш вопрос здесь. Я хотел бы поблагодарить всех за их ответы. Они великолепны. Я не являюсь мастером кодирования, но я понимаю ваше желание иметь чистый стек UTF-8 в вашей базе данных. Я использую MySQL utf8mb4 для таблиц, полей и соединений.
Моя ситуация сводилась к «Я просто хочу, чтобы мои дезинфицирующие средства, валидаторы, бизнес-логика и подготовленные заявления обрабатывали UTF-8, когда данные поступают из форм HTML или ссылок на регистрацию по электронной почте». Итак, по-моему, я начал с этой идеи:
Иначе, если это ISO-8859-1 или ASCII
а. Попытка преобразования в UTF-8 (ожидание, не завершено)
б. Определить кодировку преобразованного значения
д. Else, throw new RuntimeException
Из моего абстрактного класса Sanitizer
Что каждый программист абсолютно, положительно должен знать о кодировках и наборах символов для работы с текстом
Более того, что происходит, когда зашифрованные данные добавляются в мои ссылки регистрации электронной почты (используя OpenSSL или mcrypt )? Может ли это помешать расшифровке? Что относительно Windows-1252? Как насчет последствий для безопасности? Использование utf8_decode() и utf8_encode() в Sanitizer::isUTF8 сомнительно.
Параметры по умолчанию cURL:
Я попробовал что-то вроде этого. Это помогло мне. Если вы найдете в мета-кодировке информацию, я конвертирую, иначе ничего не делаю.
convert_cyr_string
convert_cyr_string — Преобразует строку из одной кириллической кодировки в другую
Эта функция объявлена УСТАРЕВШЕЙ, начиная с PHP 7.3.0 и была УДАЛЕНА в версии PHP 8.0.0. Использовать эту функцию крайне не рекомендуется.
Описание
Преобразует строку из одной кириллической кодировки в другую.
Список параметров
Исходная кириллическая кодировка, один символ.
Целевая кириллическая кодировка, один символ.
Возвращаемые значения
Возвращает преобразованную строку.
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 16 notes
To: mihailsbo at lycos dot ru
Transliteration could be done easier:
Only this code works OK for me, for translating win-1251 to utf-8 for macedonian letters!
// Modificated by tapin13
// Corrected by Timuretis
// Corrected by Sote for macedonian cyrillic
// Convert win-1251 to utf-8
function unicode_mk_cyr($str) <
$encode = «»;
A better function to convert cp1251 string to utf8.
Works with russian and ukrainian text.
function unicod($str) <
$conv=array();
for($x=128;$x
Sorry for my previous post. NOT array_reverce, array_flip is actual function. Correct function:
function Encode($str,$type=u)
<
$conv=array();
for($x=192;$x
Anything more it is not necessary.
It is grateful to threed [at] koralsoft.com
28-Jul-2003 03:37
i tried all functions here to convert from cp1251 to unicode, but they don’t work. i think that this work :
i tried all functions here to convert from cp1251 to unicode, but they don’t work. i think that this work :
//I’ve also built the same way for hebrew to utf converting
//Simple unicoder and decoder for hebrew and russian:
function decode_unicoded_hebrew($str) <
$decode=»»;
$in1=strpos($value,»;»); //end of code
\n»;
code should be like this:
// Modificated by tapin13
// Corrected by Timuretis
// Corrected by Sote for macedonian cyrillic
// Convert win-1251 to utf-8
function unicode_mk_cyr($str) <
$encode = «»;
previous bit of code (grmaxim’s win_to_utf8 function) didn’t work for me, so I wrote my own func to convert from win1251 to utf8:
Praising other people for their efforts to write a convenient UTF8 to Win-1251 functions may I mention that, since str_replace allows arrays as parameters, the function may be rewritten in a slightly efficient way (moreover, the array generated may be stored for performance improvement):
Unfortunately input data must be a string only. But it is may be changed! 😉
To convert multi-dimensional array I use this recursive function:
utf8_encode
(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_encode — Кодирует строку ISO-8859-1 в кодировке UTF-8
Описание
Эта функция конвертирует строку string из кодировки ISO-8859-1 в UTF-8
Список параметров
Возвращаемые значения
Список изменений
Версия | Описание |
---|---|
7.2.0 | Функция была перенесена в ядро PHP, таким образом отменив требование модуля XML для использования этой функции. |
Смотрите также
User Contributed Notes 23 notes
Please note that utf8_encode only converts a string encoded in ISO-8859-1 to UTF-8. A more appropriate name for it would be «iso88591_to_utf8». If your text is not encoded in ISO-8859-1, you do not need this function. If your text is already in UTF-8, you do not need this function. In fact, applying this function to text that is not encoded in ISO-8859-1 will most likely simply garble that text.
If you need to convert text from any encoding to any other encoding, look at iconv() instead.
Here’s some code that addresses the issue that Steven describes in the previous comment;
/* This structure encodes the difference between ISO-8859-1 and Windows-1252,
as a map from the UTF-8 encoding of some ISO-8859-1 control characters to
the UTF-8 encoding of the non-control characters that Windows-1252 places
at the equivalent code points. */
Walk through nested arrays/objects and utf8 encode all strings.
If you need a function which converts a string array into a utf8 encoded string array then this function might be useful for you:
My version of utf8_encode_deep,
In case you need one that returns a value without changing the original.
I tried a lot of things, but this seems to be the final fail save method to convert any string to proper UTF-8.
If your string to be converted to utf-8 is something other than iso-8859-1 (such as iso-8859-2 (Polish/Croatian)), you should use recode_string() or iconv() instead rather than trying to devise complex str_replace statements.
If you are looking for a function to replace special characters with the hex-utf-8 value (e.g. für Webservice-Security/WSS4J compliancy) you might use this:
$textstart = «Größe»;
$utf8 =»;
$max = strlen($txt);
I was searching for a function similar to Javascript’s unescape(). In most cases it is OK to use url_decode() function but not if you’ve got UTF characters in the strings. They are converted into %uXXXX entities that url_decode() cannot handle.
I googled the net and found a function which actualy converts these entities into HTML entities (&#xxx;) that your browser can show correctly. If you’re OK with that, the function can be found here: http://pure-essence.net/stuff/code/utf8RawUrlDecode.phps
But it was not OK with me because I needed a string in my charset to make some comparations and other stuff. So I have modified the above function and in conjuction with code2utf() function mentioned in some other note here, I have managed to achieve my goal:
// Validate Unicode UTF-8 Version 4
// This function takes as reference the table 3.6 found at http://www.unicode.org/versions/Unicode4.0.0/ch03.pdf
// It also flags overlong bytes as error
This function may be useful do encode array keys and values [and checks first to see if it’s already in UTF format]:
[NOTE BY danbrown AT php DOT net: Original function written by (cmyk777 AT gmail DOT com) on 28-JAN-09.]
Avoiding use of preg_match to detect if utf8_encode is needed:
I recommend using this alternative for every language:
Don’t forget to set all your pages to «utf-8» encoding, otherwise just use HTML entities.
This function I use convert Thai font (iso-8859-11) to UTF-8. For my case, It work properly. Please try to use this function if you have a problem to convert charset iso-8859-11 to UTF-8.
$iso8859_11 = array(
«\xa1» => «\xe0\xb8\x81»,
«\xa2» => «\xe0\xb8\x82»,
«\xa3» => «\xe0\xb8\x83»,
«\xa4» => «\xe0\xb8\x84»,
«\xa5» => «\xe0\xb8\x85»,
«\xa6» => «\xe0\xb8\x86»,
«\xa7» => «\xe0\xb8\x87»,
«\xa8» => «\xe0\xb8\x88»,
«\xa9» => «\xe0\xb8\x89»,
«\xaa» => «\xe0\xb8\x8a»,
«\xab» => «\xe0\xb8\x8b»,
«\xac» => «\xe0\xb8\x8c»,
«\xad» => «\xe0\xb8\x8d»,
«\xae» => «\xe0\xb8\x8e»,
«\xaf» => «\xe0\xb8\x8f»,
«\xb0» => «\xe0\xb8\x90»,
«\xb1» => «\xe0\xb8\x91»,
«\xb2» => «\xe0\xb8\x92»,
«\xb3» => «\xe0\xb8\x93»,
«\xb4» => «\xe0\xb8\x94»,
«\xb5» => «\xe0\xb8\x95»,
«\xb6» => «\xe0\xb8\x96»,
«\xb7» => «\xe0\xb8\x97»,
«\xb8» => «\xe0\xb8\x98»,
«\xb9» => «\xe0\xb8\x99»,
«\xba» => «\xe0\xb8\x9a»,
«\xbb» => «\xe0\xb8\x9b»,
«\xbc» => «\xe0\xb8\x9c»,
«\xbd» => «\xe0\xb8\x9d»,
«\xbe» => «\xe0\xb8\x9e»,
«\xbf» => «\xe0\xb8\x9f»,
«\xc0» => «\xe0\xb8\xa0»,
«\xc1» => «\xe0\xb8\xa1»,
«\xc2» => «\xe0\xb8\xa2»,
«\xc3» => «\xe0\xb8\xa3»,
«\xc4» => «\xe0\xb8\xa4»,
«\xc5» => «\xe0\xb8\xa5»,
«\xc6» => «\xe0\xb8\xa6»,
«\xc7» => «\xe0\xb8\xa7»,
«\xc8» => «\xe0\xb8\xa8»,
«\xc9» => «\xe0\xb8\xa9»,
«\xca» => «\xe0\xb8\xaa»,
«\xcb» => «\xe0\xb8\xab»,
«\xcc» => «\xe0\xb8\xac»,
«\xcd» => «\xe0\xb8\xad»,
«\xce» => «\xe0\xb8\xae»,
«\xcf» => «\xe0\xb8\xaf»,
«\xd0» => «\xe0\xb8\xb0»,
«\xd1» => «\xe0\xb8\xb1»,
«\xd2» => «\xe0\xb8\xb2»,
«\xd3» => «\xe0\xb8\xb3»,
«\xd4» => «\xe0\xb8\xb4»,
«\xd5» => «\xe0\xb8\xb5»,
«\xd6» => «\xe0\xb8\xb6»,
«\xd7» => «\xe0\xb8\xb7»,
«\xd8» => «\xe0\xb8\xb8»,
«\xd9» => «\xe0\xb8\xb9»,
«\xda» => «\xe0\xb8\xba»,
«\xdf» => «\xe0\xb8\xbf»,
«\xe0» => «\xe0\xb9\x80»,
«\xe1» => «\xe0\xb9\x81»,
«\xe2» => «\xe0\xb9\x82»,
«\xe3» => «\xe0\xb9\x83»,
«\xe4» => «\xe0\xb9\x84»,
«\xe5» => «\xe0\xb9\x85»,
«\xe6» => «\xe0\xb9\x86»,
«\xe7» => «\xe0\xb9\x87»,
«\xe8» => «\xe0\xb9\x88»,
«\xe9» => «\xe0\xb9\x89»,
«\xea» => «\xe0\xb9\x8a»,
«\xeb» => «\xe0\xb9\x8b»,
«\xec» => «\xe0\xb9\x8c»,
«\xed» => «\xe0\xb9\x8d»,
«\xee» => «\xe0\xb9\x8e»,
«\xef» => «\xe0\xb9\x8f»,
«\xf0» => «\xe0\xb9\x90»,
«\xf1» => «\xe0\xb9\x91»,
«\xf2» => «\xe0\xb9\x92»,
«\xf3» => «\xe0\xb9\x93»,
«\xf4» => «\xe0\xb9\x94»,
«\xf5» => «\xe0\xb9\x95»,
«\xf6» => «\xe0\xb9\x96»,
«\xf7» => «\xe0\xb9\x97»,
«\xf8» => «\xe0\xb9\x98»,
«\xf9» => «\xe0\xb9\x99»,
«\xfa» => «\xe0\xb9\x9a»,
«\xfb» => «\xe0\xb9\x9b»
);
// Reads a file story.txt ascii (as typed on keyboard)
// converts it to Georgian character using utf8 encoding
// if I am correct(?) just as it should be when typed on Georgian computer
// it outputs it as an html file
//
// http://www.comweb.nl/keys_to_georgian.html
// http://www.comweb.nl/keys_to_georgian.php
// http://www.comweb.nl/story.txt
keys to unicode code
// this meta tag is needed
// note the sylfean font seems to be standard installed on Windows XP
// It supports Georgian
Re the previous post about converting GB2312 code to Unicode code which displayed the following function:
In the original function, the first latin chacter was dropped and it was not converting the first non-latin character after the latin text (everything was shifted one character too far to the right). Reversing those two lines makes it work correctly in every example I have tried.
Also, the source of the gb2312.txt file needed for this to work has changed. You can find it a couple places:
Someday they might be hardcoded into PHP.
*/
The following Perl regular expression tests if a string is well-formed Unicode UTF-8 (Broken up after each | since long lines are not permitted here. Please join as a single line, no spaces, before use.):
PHP: преобразуйте любую строку в UTF-8, не зная исходного набора символов или, по крайней мере, попробуйте
у меня есть приложение, которое имеет дело с клиентами со всего мира, и, естественно, я хочу, чтобы все, что входит в мои базы данных, было закодировано UTF-8.
для загрузки файлов мне нравится идея попросить конечного пользователя указать кодировку, которую они используют, и показать им превью того, как будет выглядеть вывод, но это не помогает против неприятных хакеров (на самом деле, это может сделать их жизнь немного облегчающий.)
Я читал другие вопросы SO по этому вопросу, но, похоже, все они имеют тонкие различия, такие как «мне нужно разобрать RSS-каналы» или «я соскребаю данные с веб-сайтов» (или, действительно, «Вы не можете»).
но должно быть что-то, что, по крайней мере, имеет хороший попробовать!
10 ответов
то, что вы просите, чрезвычайно трудно. Если возможно, лучше всего заставить пользователя указать кодировку. Предотвращение атаки не должно быть намного проще или сложнее таким образом.
тем не менее, вы можете попробовать сделать это:
установка его в strict может помочь вам получить лучший результат.
в Родине России у нас есть 4 популярных кодировки, поэтому ваш вопрос пользуется большим спросом здесь.
только по кодам символов char вы не можете обнаружить кодировку, потому что кодовые страницы пересекаются. Некоторые кодовые страницы на разных языках имеют даже полное пересечение. Итак,нам нужен другой подход.
единственный способ работы с неизвестными кодировками-это работа с вероятностями. Поэтому мы не хотим ответить на вопрос «Что такое кодировка текста?»мы пытаясь понять»какова наиболее вероятная кодировка этого текста?«.
один парень здесь, в популярном российском технологическом блоге, изобрел этот подход:
создайте диапазон вероятностей кодов символов в каждой кодировке, которую вы хотите поддержать. Вы можете построить его, используя некоторые большие тексты на вашем языке (например, некоторую фантастику, используйте Шекспира для английского языка и Толстого для русского, lol ). Вы получите smth так:
далее. Вы берете текст в неизвестной кодировке и для каждой кодировки в вашем «вероятностном словаре» вы ищете частоту каждого символа в неизвестном закодированном тексте. Сумма вероятностей символов. Скорее всего, победителем станет кодирование с более высоким рейтингом. Лучшие результаты для больших текстов.
если вы заинтересованы, Я с удовольствием помогу Вам с этой задачей. Мы можем значительно повысить точность путем построения двух-charcodes список вероятностная.
кстати. mb_detect_encoding certanly не работает. Да, конечно. Пожалуйста, возьмите посмотрите исходный код mb_detect_encoding в » ext/mbstring/libmbfl/mbfl / mbfl_ident.с.»
Вы, наверное, пробовали это, но почему бы просто не использовать функцию mb_convert_encoding? Он попытается автоматически обнаружить набор символов предоставленного текста или вы можете передать ему список.
кроме того, я попытался запустить:
и результаты одинаковы для обоих. Как вы видите, что ваш текст усечен до «fianc»? это в БД или в браузере?
невозможно определить кодировку строки, которая является полностью точной. Есть способы попытаться угадать кодировку. Одним из этих способов, и, вероятно,/в настоящее время лучшим в PHP, является mb_detect_encoding(). Это будет сканировать вашу строку и искать вхождения вещей, уникальных для определенных наборов символов. В зависимости от вашей строки могут не быть таких различимых вхождений.
есть только несколько разных символов, и, что еще хуже, они представлены одними и теми же байтами. Невозможно определить, дается ли строка, не зная, что это кодировка, должен ли байт 0xA4 обозначать ¤ или € в вашей строке, поэтому нет способа узнать, что это точная кодировка.
(Примечание: Вы можете добавить человеческий фактор или еще более продвинутое сканирование техника (например, что предлагает Ороборос102), чтобы попытаться выяснить, основываясь на окружающем контексте, должен ли персонаж быть ¤ или€, хотя это кажется слишком далеким мостом)
есть более различимые различия между, например, UTF-8 и ISO-8859-1, поэтому по-прежнему стоит попытаться выяснить, когда вы не уверены, хотя вы можете и никогда не должны полагаться на то, что это правильно.
есть и другие способы обеспечения правильной кодировки. Что касается форм, попробуйте применить UTF-8 как можно больше (проверьте snowman, чтобы убедиться, что представление yout будет UTF-8 в каждом браузере:http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen ) Это делается, по крайней мере, вы можете быть уверены, что каждый текст, представленный через ваши формы utf_8. Что касается загруженных файлов, попробуйте запустить на нем команду unix ‘file-i’, например, exec() (если это возможно на вашем сервере), чтобы помочь обнаружению (используя спецификацию документа.) Что касается данных очистки, вы можете прочитать заголовки HTTP, которые обычно указывают кодировку. При анализе XML-файлов проверьте, содержат ли метаданные XML определение кодировки.
вместо того, чтобы пытаться автоматически угадать кодировку, вы должны сначала попытаться обеспечить определенную кодировку себя, где это возможно, или пытается захватить определение из источника, из которого вы его получаете (если применимо), прежде чем прибегать к обнаружению.
Я не думаю, что это проблема. Приложение знает источник входных данных. Если это из формы, используйте кодировку UTF-8 в вашем случае. Эта работа. Просто проверьте данные предоставлено правильно закодировано (валидация). Имейте в виду, что не все базы данных поддерживают UTF-8 в полном диапазоне.
Если это файл, вы не сохраните его UTF-8, закодированный в базе данных, но в двоичной форме. Когда вы снова выводите файл, также используйте двоичный вывод, тогда это полностью прозрачно.
ваша идея хорошая, что пользователь может сказать кодировку, может ли он / она сказать в любом случае после загрузки файла, так как он двоичный.
поэтому я должен признать, что не вижу конкретный вопрос, который вы поднимаете своим вопросом. Но, возможно, вы можете добавить некоторые подробности, в чем ваша проблема.
вы можете создать набор метрик, чтобы попытаться угадать, какая кодировка используется. Опять же, не идеально, но может поймать некоторые промахи из mb_detect_encoding ().
есть некоторые действительно хорошие ответы и попытки ответить на свой вопрос здесь. Я не мастер кодирования, но я понимаю ваше желание иметь чисто UTF-8 стек до конца к вашей базе данных. Я использую MySQL utf8mb4 кодировка для таблиц, полей и связей.
моя ситуация сводилась к «я просто хочу, чтобы мои дезинфицирующие средства, валидаторы, бизнес-логика и подготовленные заявления имели дело с UTF-8, когда данные поступают из HTML-форм, или e-mail Регистрация ссылки.»Итак, по-своему просто, я начал с этой идеи:
еще, если это ISO-8859-1 или ASCII
a. Попытка преобразования в UTF-8 (подождите, не закончено)
b. Обнаружьте кодировку преобразованного значения
d. Эльза, throw new RuntimeException
из моего абстрактного класса Sanitizer
более того, что происходит когда зашифрованные данные добавляются в мои ссылки регистрации электронной почты (используя OpenSSL или mcrypt )? Может ли это помешать расшифровке? Как насчет Windows-1252? Как насчет последствий для безопасности? Использование utf8_decode() и utf8_encode() на Sanitizer::isUTF8 сомнительный.