sprofxx
23.04.2014 - 01:18
Парсю сайт, курлом тащу. В одной строке при разборе через substr пытаюсь выхватить русские символы, даже один например, но в переменную пишется символ: "\ufffd", если несколько прихватывать, то в перемешку с цифрами. Строку парсю вида даты: "23 апр 10:00". Страшные символы идут как то непонятно, например после буквы "а", если брать допустим несколько символов прихватывая подряд. Текст в кодировке UTF-8, mb_detect_encoding это подтверждает. iconv не помогает никак, да собственно и перекодировать то по идее не надо ниче. Как можно вылечить это и выкинуть непонятные символы?
Bazaroff
23.04.2014 - 08:31
header('Content-Type: text/html; charset=utf-8');
function getPage( $url )
{
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
Попробуй так
bestxp
23.04.2014 - 09:01
Это похоже на закодированный через json_encode текст
попробуй обратно в сущности отконвертировать
Zzepish
23.04.2014 - 11:57
bestxp
шта???? это символ в формате utf8. Какой еще json?
sergeiss
23.04.2014 - 12:15
Цитата (sprofxx @ 23.04.2014 - 01:18) |
...через substr пытаюсь... Текст в кодировке UTF-8, mb_detect_encoding это подтверждает... |
Возьми mb_substr()
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sprofxx
23.04.2014 - 19:21
Не работают все предложенные варианты. Выдает такие символы все равно.
Цитата |
Это похоже на закодированный через json_encode текст попробуй обратно в сущности отконвертировать |
В примере таким образом обозначается один взятый символ из строки, это не похоже как то на json.
sprofxx
23.04.2014 - 22:35
В общем выяснил новое. Если из строки "23 апр 10:00" выполнять mb_substr($str, 3, 6), т.е. брать по два символа на букву, начиная с четвертой позиции, то в переменную вносятся три русские буквы правильно. strlen говорит что там 15 символов в этой строке. Как это привести в нормальный вид, чтобы работать по-нормальному функциями пхп для работы со строками (посимвольно)?
sprofxx
23.04.2014 - 22:54
Короче, в utf-8 на русскую букву идет два символа, это нужно учитывать при разборе строк. Если брать один символ от буквы, то он будет выглядеть так, как я написал в вопросе, поэтому когда я брал три символа начиная с позиции буквы "а", то у меня бралась буква и крякозябра (два символа на букву, и один символ из второй буквы). Проблема решена.
AllesKlar
23.04.2014 - 23:00
sprofxx
Тебе ж сказали
Цитата |
Возьми mb_substr()
|
_____________
[продано копирайтерам]
sprofxx
23.04.2014 - 23:10
Он также работает как и substr, выдает ровно те же результаты.
AllesKlar
23.04.2014 - 23:15
Цитата (sprofxx @ 23.04.2014 - 23:10) |
Он также работает как и substr, выдает ровно те же результаты. |
Ну так им же не нужно прям так "в лоб".
Это штука более тонкая, у нее настройки есть.
http://de3.php.net/manual/ru/function.mb-substr.php - вот там описание, примеры, разбирай, что к чему.
_____________
[продано копирайтерам]
sergeiss
23.04.2014 - 23:19
Цитата (sprofxx @ 23.04.2014 - 23:10) |
Он также работает как и substr, выдает ровно те же результаты. |
При такой невнимательности не получится из тебя программиста... Функции mb_* как раз работают с мультибайтыми кодировками.
Или будь внимательнее и пробуй то, что тебе говорят, или оставь программирование.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sprofxx
23.04.2014 - 23:26
Спасибо, помогло
mb_substr($strdate, 3, 3, 'utf-8') - забрал три русские буквы.
Цитата |
При такой невнимательности |
Не надо обзываться, работаю много, с пхп не часто, некогда разглядывать квадратные скобки
Всем спасибо.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.