2011-02-02 8 views
0

У меня есть строка, как показано нижеИзвлечение текста из html?

<p>&nbsp;Hello World, this is StackOverflow&#39;s question details page</p> 

Я хочу, чтобы извлечь текст из HTML выше, как Hello World, this is StackOverflow's question details page уведомление, что я хочу, чтобы удалить &nbsp;, а также.

Как мы можем добиться этого в PHP, я пробовал несколько функций, strip_tags, html_entity_decode и т. Д., Но в некоторых случаях все не работают.

Пожалуйста, помогите, спасибо!

Отредактировано моего код, который я пытаюсь, как показано ниже, но не работает :(Он покидает &nbsp; и &#39; этого типа символов.

$TMP_DESCR = trim(strip_tags($rs['description'])); 
+0

Какие условия, не оставляйте нас гадать !? –

+0

, поскольку @jakenoble говорит, поможет, если вы разместите свой пример кода и вывод & ошибки. – diagonalbatman

+0

Если показанная строка является частью полной HTML-страницы или более крупного фрагмента, содержащего дополнительную разметку, см. [Лучшие методы анализа HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse- html/3577662 # 3577662) – Gordon

ответ

1

Ниже работал для меня ... должен был сделать str_replace о неприменении но все же.

$string = "<p>&nbsp;Hello World, this is StackOverflow&#39;s question details page</p>"; 
echo htmlspecialchars_decode(trim(strip_tags(str_replace('&nbsp;', '', $string))), ENT_QUOTES); 
+0

да, это работает и для меня Если нет решения для ' ', тогда его штраф, мы можем пойти с заменой. Спасибо за помощь! – Prashant

0

strip_tags() избавится от тегов, и trim() должны избавиться от пробелов. Я не уверен, если он будет работать с неразрывных пробелов, хотя.

0

Во-первых, вы должны вызвать облицовку() на HTML, чтобы удалить пустое пространство. http://php.net/manual/en/function.trim.php

Затем strip_tags, затем html_entity_decode.

Итак: html_entity_decode(strip_tags(trim(html)));

0

Вероятно, самый хороший и самый надежный способ сделать это с подлинными (X | HT) ML функции синтаксического анализа как DOMDocument класса:

<?php 

$str = "<p>&nbsp;Hello World, this is StackOverflow&#39;s question details page</p>"; 

$dom = new DOMDocument; 
$dom->loadXML(str_replace('&nbsp;', ' ', $str)); 

echo trim($dom->firstChild->nodeValue); 
// "Hello World, this is StackOverflow's question details pages" 

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


Edit: Вы можете повторно использовать DOMDocument объект, так что вам нужно всего лишь две строки внутри цикла:

$dom = new DOMDocument; 
while ($rs = mysql_fetch_assoc($result)) { // or whatever 
    $dom->loadHTML(str_replace('&nbsp;', ' ', $rs['description'])); 
    $TMP_DESCR = $dom->firstChild->nodeValue; 

    // do something with $TMP_DESCR 
} 
+0

кажется длинным методом, и поскольку я запускаю цикл, я думаю, что это будет обширно. – Prashant

Смежные вопросы