Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вопрос по html_get_content


Автор: Win MK 32 14.6.2012, 19:45
Получаем текст в веб-страницу засчет html_get_content. Надо получить текст между <div id=mydiv>" и "</div>", как его получить? Хочется седалать функцию, которая бы делала это (параметры: $Url, $beginStr, $endStr)

Автор: Sanchezzz 14.6.2012, 20:03
strpos первый параметр  strpos второй параметр  потом substr отмерили по позициям 

Автор: Sanchezzz 14.6.2012, 20:31
Код

function mb_between($url, $start, $end, $encoding = null) {
      $string = file_get_contents($url);
      if($string===false) return false;
      $encd =(is_null($encoding) === true)? 'utf-8' : $encoding;
        
     $pos1 = mb_strpos($string,$start,0,$encd);
     if ($pos1 === false ) return false;
     $pos1 += mb_strlen($start,$encd);     
     $pos2 = mb_strpos($string,$end,$pos1,$encd) - $pos1;
     return mb_substr($string,$pos1,$pos2,$encd);
    }

print mb_between($url = '', '[',']', 'utf-8');

Можно еще регуляркой

Автор: teroni 15.6.2012, 01:02
Или explode
Код

function get_between($str, $begin, $end)
{
$tmp1 = explode($begin, $str);
$tmp2 = explode($end, $tmp1[1]);
return $tmp2[0];
}

Естественно, найдёт только первое вхождение, если там нет открывающего фрагмента - выдаст ошибку, если закрывающего - тоже неправильный вариант. Так что моя функция - чисто для демонстрации.
А вообще, я бы регуляркой делал, люблю я их и короче всего получается.
Код

function get_between($str, $begin, $end)
{
if (!preg_match('/'.preg_quote($begin).'(.+)'.preg_quote($end).'/isU', $str, $match))
   return false;
else
   return $match[1];
}

Автор: Win MK 32 27.8.2012, 18:33
Ребята, подскажите пожалуйста. Как переделать функцию, чтобы добавить еще два входных аргумента: номер входящего в $str текста из $begin и номер найденного фрагмента для $end?

Т.е. чтобы было примерно так:
function get_between($str, $begin, $end, $b_num,$e_num)

Например для такого случая(я выделил искомое жирным):
Цитата

<div id="mydiv">Не искомое значение</div><div id="mydiv"><div id="mydiv">Искомое значение</div></div>

Так понимаю можно обойтись без параметра $e_num.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)