Проблема с поиском при использовании русских букв

S
На сайте с 29.12.2008
Offline
43
523

Делаю парсинг рассказов.

Сначала беру с главной страницы первую ссылку на последний добавленный рассказ.

Скачиваю рассказ.

Пытаюсь выдернуть название рассказа,

но ничего не получается.


<?php
//ищем ссылку на новый рассказ
$f=join('', file("http://www.sexytales.ru/"));
// начало ссылки
$begin=strpos(strtolower($f), 'index.php?p=show&sid=', 0);
// конец ссылки
$end=strpos(strtolower($f), '"', $begin);
// вырезаем то, что нам нужно - ссылку целиком
$link=substr($f, $begin, $end-$begin);

//скачиваем рассказ
$f=join('', file("http://www.sexytales.ru/".$link));
//парсим
// начало названия
$begin=strpos(strtolower($f), 'Название:', 0);
// конец названия
$end=strpos(strtolower($f), '<br>', $begin);
// вырезаем то, что нам нужно - название целиком
$title=substr($f, $begin, $end-$begin);
echo $title;
?>
[Удален]
#1

ужас. вас бы послать поучить регулярные выражения.

php.net/preg_match

S
На сайте с 29.12.2008
Offline
43
#2

А в регулярных выражениях будет работать поиск по русским буквам?

[Удален]
#3

У вас там видимо utf-8, а с ним стандартные строковые функции php работают нехорошо. Используйте функции с приставкой mb_

Хотя лучше всё-таки переписать на регулярки. Да, они нормально работают с utf-8.

Кстати, тут как минимум одна ошибка: название статьи не будет находиться, т.к. $begin=strpos(strtolower($f), 'Название:', 0); Первый аргумент функции не содержит знаков в верхнем регистре, а во втором аргументе они есть. Тут либо использовать функцию stripos, либо strtolower делать на оба аргумента.

посмотрел, оказывается вас эта ошибка и интересует :) Ну и вместо join('',file()) используйте file_get_contents() раз уж curl использовать вероисповедание не позволяет.

S
На сайте с 29.12.2008
Offline
43
#4
nikitian:
У вас там видимо utf-8, а с ним стандартные строковые функции php работают нехорошо. Используйте функции с приставкой mb_
Хотя лучше всё-таки переписать на регулярки. Да, они нормально работают с utf-8.

Сайт sexytales.ru в кодировке windows-1251,

скрипт в кодировке ANSI.

Может использовать convert_cyr_string() ?

В ней можно указать w - windows-1251;

но какую букву указать для ANSI ?

srarwars добавил 06.05.2009 в 14:16

nikitian:
Ну и вместо join('',file()) используйте file_get_contents() раз уж curl использовать вероисповедание не позволяет.

Да мне как то больше нравятся сокеты.

Так сказать - ближе к глубинам протоколов Сети.

А этот случай просто исключение

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий