|
|
|
|
|
для: Slo_Nik
(28.04.2013 в 09:32)
| | Вот этого я не знаю Если вы сперва забираете со всех сайтов, готовите эти данные, сохраняя их в массиве, а только потом записываете их в базу, то есть смысл в этом же массиве хранить и признак конвертирования. Хотя с другой стороны, парсер это ведь "не прочитать" body (хотя есть и классы которые разбирают документ на DOM-элементы), а пользуетесь регулярными выражениями, и какой тогда смыл для в этих выражениях учитывать кодировку, проще указать модификатор для utf, если вы пишите в базу в этой кодировке.
Беспокоится, что будут английские и при сохранении в базу нет смысла их конвертировать, тоже нет смысла - хотя английским символам и нужно по одному байту, в базе все равно резервируется больше одного байта на символ. То есть, если это забота об экономии места, то она напрасная.
В общем вам виднее, что и как делать, вы же делаете, не я, я не в курсе забот ваших. ) | |
|
|
|
|
|
|
|
для: confirm
(28.04.2013 в 02:52)
| | На счёт substr() конечно, не подумал как следует.
Вот с моментом определения кодировки я подумал, что будет лучше сразу её записать элементом массива. Потом, когда подготавливать к записи в базу, посмотреть этот элемент и уже решать, применять iconv() или нет, без определения кодировке в цикле. | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.04.2013 в 22:46)
| | Ну да, я привожу пример работы с удаленными данными, потому и file_get_contents, а вы значит обошлись, хотя загружаете иным способом. )
Я в примере брал часть только затем, чтобы не грузить все, вдруг там размер километровый. Вы же для парсера вынуждены забирать все, так что смысла в substr($str, 0, 500 нет). Да и проверять кодировку сразу тоже нет необходимости - получили контент вас интересующий, а потом уже определись с его кодировкой.
Не может определиться со строкой меньшей длины наверное же потому, что на этом участке нет мультибайтных символов, ведь английским что utf, что нет, все одно один байт занимают. | |
|
|
|
|
|
|
|
для: confirm
(27.04.2013 в 03:12)
| | Благодарю за подсказку.
Чуть изменил Ваш пример, обошёлся без file_get_contents();
<?php
$con_type = mb_detect_encoding(substr($str, 0, 500), 'UTF-8', true) ? 'UTF-8' : 'Windows-1251' ;
?>
|
Только ещё один вопрос.
Если указать длину возвращаемой подстроки меньше 500, например 400, то кодировку уже не определяет, всем трём сайтам указывает одинаковую.
Почему это так зависит от длины строки? | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.04.2013 в 02:57)
| |
<?
echo mb_detect_encoding(file_get_contents('http://www.votpusk.ru/firmlist.asp', false, null, 0, 1000),'utf-8', true) ? 'UTF' : 'NO';
|
А у меня он никак не утверждает, что в UTF.
mb_detect_encoding() в данном применении точно закосячит, если в коде где либо не в начале будет BOM. | |
|
|
|
|
|
|
|
для: confirm
(27.04.2013 в 02:36)
| | http://www.votpusk.ru/firmlist.asp | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.04.2013 в 01:39)
| | URL сайта на котором не корректно детектируется напишите. | |
|
|
|
|
|
|
|
для: confirm
(26.04.2013 в 03:38)
| | get_meta_tags() не подходит потому, что возвращает значение тех meta тегов у которых есть атрибут name.
И с mb_detect_encoding() тоже фигня получается.
Для всех трёх сайтов показала utf-8, но ведь одни сайт точно в windows-1251... | |
|
|
|
|
|
|
|
для: Slo_Nik
(25.04.2013 в 22:34)
| | get_meta_tags(file_get_contents(url)) | |
|
|
|
|
|
|
|
для: confirm
(25.04.2013 в 21:55)
| | как проверяются мета данные? | |
|
|
|
|