ФорумПрограммированиеPHP для идиотов → Первых N слов из текста с html разметкой. Как?

Первых N слов из текста с html разметкой. Как?

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 12:44

    Привет! Есть допустим строка с текстом с html. Как достать первых 50 слов без учета html? Тоесть должно вернуть 50 слов + html разметку, можно с открытыми тегами.

    Я думал, что можно обрезать все теги, взять 50 слов, но как потом найти последнее 50-ое слово в строке с html?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 13:17, спустя 32 минуты 46 секунд

    попробуй phpQuery
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 21:09, спустя 7 часов 51 минуту 37 секунд

    блин, это ж целая библиотека, мнебы попроще что-то. Да и я не представляю как ней можно сделать, то что я хочу.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 21:30, спустя 20 минут 50 секунд

    Давай так:


    $html = "тут разметка и текст";
    $text = strip_tags($html);
    $words = //взять 50 слов

    $lastWord = substr($words, strrpos($words, ' '));
    echo substr($html, 0, strpos($words, $lastWord));

    Спустя 58 сек.
    я так, просто по ходу накалякал, надо еще проверять совпадающие имена и тд… короче у меня такой задачи не было, решения тоже нет
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 21:31, спустя 1 минуту 12 секунд

    adw0rd, пытаюсь в мозге выполнить, хуйня с вид какая то … )
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 22 августа 2009 г. 21:34, спустя 3 минуты 30 секунд

    adw0rd, а в $words что? я думал к-во слов
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 21:42, спустя 7 минут 47 секунд


    adw0rd, а в $words что? я думал к-во слов
    это 50 слов )
    Спустя 33 сек.

    adw0rd, пытаюсь в мозге выполнить, хуйня с вид какая то … )
    с виду примитивный алгоритм, который не защищен от дубляжей "вася хуй вася"
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 23:45, спустя 2 часа 2 минуты 41 секунду

    да, в этом и проблема, что слова могут повторяться и оно может вставить тупо в первое попавшееся слово, хотя на самом деле нужно в другом месте. Для меня нерешаемая задача)) Я пока просто обрезаю вместе с тегами, а потом недостающие теги закрываю через htmlpurifier.
  • Спаситель слонов

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 25 августа 2009 г. 22:39, спустя 2 дня 22 часа 54 минуты

    а если водтак
      //исходная строка с хтмл
    $html='<div>Have a question about <b>Firefox</b>? Search. Search the Knowledge Base or check out the <i>tutorials and reference</i> articles below.</div>';

    //допустим 50е слово - слово "сёрч".
    $word='Search';

    $from=0;
    for($i=0;$i<substr_count(strip_tags($html),$word);$i++){
    $lastWordPos = strpos($html, $word, $from);
    $from=$lastWordPos+1;
    }

    //позиция 50го слова в строке с хтмл
    echo $lastWordPos; //выводит "51"
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 25 августа 2009 г. 22:45, спустя 5 минут 49 секунд

    спаситель слонов такой спаситель слонов
  • Спаситель слонов

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 25 августа 2009 г. 22:51, спустя 6 минут 35 секунд

    только наверное не будет работать если в тэге "50е" слово встречается
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 августа 2009 г. 0:03, спустя 1 час 11 минут 15 секунд

    >>> тут хуйня <<<
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 25 августа 2009 г. 23:27, спустя 23 часа 24 минуты 24 секунды

    upd:

    $words = preg_split('#\s+#s', trim($text));
    $result = array();

    foreach ($words as $word)
    {
    if (!preg_match('#^<[^>]+>$#', $word))
    {
    $result[] = $word;
    }
    }

    echo implode(' ', array_slice($result, 0, COUNT));
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 10:25, спустя 10 часов 58 минут 29 секунд

    где-то я эту аватарку уже видел
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 26 августа 2009 г. 10:31, спустя 5 минут 28 секунд


    где-то я эту аватарку уже видел
    ага-ага :)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!