Нет способа идентифицировать кодировку строки, которая является абсолютно точной.Есть способы попытаться угадать кодировку.Одним из таких способов, и, вероятно, в настоящее время лучшим в PHP, является mb_detect_encoding ().Это будет сканировать вашу строку и искать вхождения вещи, уникальные для определенных кодировок.В зависимости от вашей строки, таких различимых случаев может не быть.
Возьмите кодировку ISO-8859-1 против ISO-8859-15 (http://en.wikipedia.org/wiki/ISO/IEC_8859-15#Changes_from_ISO-8859-1)
Есть толькоГорстка разных символов, и, что еще хуже, они представлены одинаковыми байтами.Невозможно определить, получая строку, не зная ее кодировку, должен ли байт 0xA4 означать € или € в вашей строке, поэтому нет способа узнать, что это за точная кодировка.
(Примечание:Вы можете добавить человеческий фактор или даже более продвинутую технику сканирования (например, то, что предлагает Oroboros102), чтобы попытаться выяснить, основываясь на окружающем контексте, если символ должен быть ¤ или €, хотя это кажется слишком большим мостом)
Существует более различимая разница, например, между UTF-8 и ISO-8859-1, поэтому все же стоит попытаться выяснить это, когда вы не уверены, хотя вы можете и не должны полагаться на то, что это правильно.
Интересное чтение: http://kore -nordmann.de / blog / php_charset_encoding_FAQ.html # how-do-i-определить-кодировку-кодирование-строки
Есть и другие способы обеспечения правильной кодировки.Что касается форм, постарайтесь как можно чаще применять UTF-8 (проверьте, что в любом браузере отправка будет в формате UTF-8: http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen) Это делается, по крайней мере, вы можете быть уверены,что каждый текст, отправленный через ваши формы, является utf_8.Что касается загруженных файлов, попробуйте запустить на нем команду unix 'file -i', например, через exec () (если это возможно на вашем сервере), чтобы помочь обнаружению (используя спецификацию документа). Что касается очистки данных, вы можете прочитать заголовки HTTP,это обычно указывает кодировку.При синтаксическом анализе XML-файлов проверьте, не содержат ли метаданные XML определение набора символов.
Вместо того, чтобы пытаться автоматически угадать набор символов, сначала следует попытаться убедиться в наличии определенного набора символов самостоятельно или попытаться получитьопределение из источника, из которого вы получаете его (если применимо), прежде чем прибегнуть к обнаружению.