[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка на соответствие UTF-8
Kumena
Здравствуйте!

Я дорабатываю, скрипт определяющий кодировку веб-страницы и конвертирующий её в UTF-8.
В качестве "последнего" шанса после предыдущих вариантов извлечения кодировки из заголовков и мета-тагов, хочу использовать проверку на соответствие страницы кодировке UTF-8. Т.е, если контент страницы состоит из латинских символов и всевозможных знаков препинания, то страницу буду считать кодированной в UTF-8.

Не хочется делать проверку контента регулярными выражениями, т.к. не особо ими владею и думаю, что какие-то вполне подходящие символы потеряю. Но нашел функцию mb_check_encoding (http://php.net/manual/ru/function.mb-check-encoding.php) , которую хочу использовать как

if (mb_check_encoding($content,"UTF-8"))==true { // страницу считаем кодированной в UTF-8


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

Уважаемые профи, верен ли такой путь?



Спустя 5 минут, 29 секунд (6.06.2012 - 11:47) Guest написал(а):
какой смысл от этой конвертации
Не могу придумать где её можно будет применить

Спустя 1 час, 43 минуты, 46 секунд (6.06.2012 - 13:31) Kumena написал(а):
Вы думаете, она не нужна?

Спустя 38 минут, 12 секунд (6.06.2012 - 14:09) redreem написал(а):

Спустя 19 часов, 47 минут, 55 секунд (7.06.2012 - 09:57) Kumena написал(а):
Спасибо что отозвались, redreem!
Второй день изучаю статью и статьи по ссылкам, но пока так и не могу найти для себя конкретного ответа - какая же проверка на соответствие контента кодировке UTF-8 наиболее верная? Пускай при условиях валидности проверяемой строки и хотя бы проверки на латинские буквы+пунктуацию.

Спустя 10 минут, 9 секунд (7.06.2012 - 10:07) redreem написал(а):
ну мое мнение что в 100% случаев на 100% определить невозможно. всегда будут исключения. можно лишь для своей задачи выбрать наиболее статистически приемлимый.

Спустя 30 минут, 42 секунды (7.06.2012 - 10:38) Kumena написал(а):
А на найдется ли у Вас "в закромах" проверенного практикой регулярного выражения для наиболее широкой проверки на латинские буквы+пунктуацию (в.т.ч. HTML) ?

Спустя 36 минут, 54 секунды (7.06.2012 - 11:15) twin написал(а):
Костыль конечно, но для определения utf-8 работает. Просто нестандартный подход:

    $content = file_get_contents('http://phpforum.ru');

function checkCharset($content)
{
return ($content == @iconv('utf-8', 'utf-8', $content)) ? 'utf-8' : 'other';
}

echo checkCharset($content);

Спустя 6 минут, 42 секунды (7.06.2012 - 11:22) redreem написал(а):
twin

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

Спустя 1 минута, 44 секунды (7.06.2012 - 11:23) twin написал(а):
Костыльность в самой идее определения кодировки текста. А насчет ресурсоемкости - не думаю, что регулярка победит.

Цитата
причем если исходный текст в не в utf8, но исключительно на латиннице, то функция так же вернет utf8.
Нука поведай мне пожалуйста, какая же это будет кодировка тогда, если там только латиница?

Спустя 3 минуты, 35 секунд (7.06.2012 - 11:27) redreem написал(а):
twin

откуда мне знать какая там исходная кодировка smile.gif просто сравнение даст true

Спустя 5 минут, 35 секунд (7.06.2012 - 11:33) twin написал(а):
Прежде чем писать сервисы по определению кодировок, не плохо бы изучить сам предмет. Хотя бы тут посмотри. Латиница во всех таблицах кодируется одинаково, так что можно смело заявить, что это UTF-8. Раз нет символов, кодированных иначе.

А насчет костылей, дык если определяется кодировка веб-странцы, то её нужно определять по заголовку. Любая попытка определить её по тексту - уже костыль по определению.

Спустя 16 минут, 48 секунд (7.06.2012 - 11:49) redreem написал(а):
twin

если

Цитата
не плохо бы изучить сам предмет


адресовано мне, то я то уж предостаточно его изучил, пруф: http://phpforum.ru/index.php?showtopic=50538&hl=

и кстати просмотрел темку - оказывается я пришел к такой конструкции:

Цитата
preg_match('#.#u', $var) - определяет utf не utf.


хотя уже особо не помню где и как это работало. экспериментировал видимо ради интереса.

Спустя 14 минут, 41 секунда (7.06.2012 - 12:04) Nikitian написал(а):
Посмотрите ещё это

Спустя 23 минуты, 10 секунд (7.06.2012 - 12:27) twin написал(а):
Цитата (redreem @ 7.06.2012 - 08:49)
twin

если

Цитата
не плохо бы изучить сам предмет


адресовано мне, то я то уж предостаточно его изучил, пруф: http://phpforum.ru/index.php?showtopic=50538&hl=://http://phpfor...topic=50538&hl=

Скорее это адресовано автору, но вот насчет "предостаточно его изучил" после
Цитата
причем если исходный текст в не в utf8, но исключительно на латиннице
вызывает сомнения. Вот скажем так. На каком языке написано это: "forum"? Однозначно сказать, кто это писал и на каком языке нельзя. Потому что и на немецком и на французском и на английском это пишется одинаково. Вот если добавить артикль - будет понятно.

Однако можно смело сказать, что это слово написано на английском, и это будет истина. Так же и с кодировками. Латиница во всех таблцах кодируется одинаково. И имея текст с одной латиницей ни в коем случае нельзя определить по нему, какая таблица была использовани при его наборе. Но можно с точностью утверждать, что текст отвечает требованиям кодировки UTF-8.

Так что вот это заявление
Цитата
откуда мне знать какая там исходная кодировка

мягко скажем не к месту.

Спустя 48 минут, 33 секунды (7.06.2012 - 13:16) redreem написал(а):
twin

вот блин нет щас у меня потребности копания в кодировках, как появится - я обязательно вспомню этот топик и отпишу какую-нить "заковырку" smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.