2010-01-20 3 views

답변

0

간단한 접근 방식은 strip_tags() 일 수 있으며 발췌 부분을 캡처 할 수 있습니다.

+0

동의 - 이것은 필자가 항상 할 것입니다. 유일한 단점은 강한, 엠, 등 ..뿐만 아니라 모든 링크에 대한 서식을 잃는 것입니다 -하지만 필자는 항상 그것을 받아 들였고 이동 :-) – prodigitalson

+0

내가 태그를 가지고 싶습니다 ... –

0

짧은 대답 : DOMDocument::loadHTML($string)으로 DOM으로 변환 한 다음 텍스트 노드의 문자를 계산하는 트리를 걸어보십시오. 한도에 도달하면 해당 노드의 나머지 부분을 '...'또는 빈 문자열로 바꾸고 모든 후속 노드에서 $node->parentNode->removeChild($node)으로 간단히 전화하십시오.

+0

줄 수 있습니까? 일부 코드 예제 : D –

0

여기에 표준 PHP의 일부입니다있는 DOMDocument를 사용하여 빠르고 신뢰할 수있는 솔루션입니다 :

function cut_html ($html, $limit) { 
    $dom = new DOMDocument(); 
    $dom->loadHTML(mb_convert_encoding("<div>{$html}</div>", "HTML-ENTITIES", "UTF-8"), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 
    cut_html_recursive($dom->documentElement, $limit); 
    return substr($dom->saveHTML($dom->documentElement), 5, -6); 
} 

function cut_html_recursive ($element, $limit) { 
    if($limit > 0) { 
     if($element->nodeType == 3) { 
      $limit -= strlen($element->nodeValue); 
      if($limit < 0) { 
       $element->nodeValue = substr($element->nodeValue, 0, strlen($element->nodeValue) + $limit); 
      } 
     } 
     else { 
      for($i = 0; $i < $element->childNodes->length; $i++) { 
       if($limit > 0) { 
        $limit = cut_html_recursive($element->childNodes->item($i), $limit); 
       } 
       else { 
        $element->removeChild($element->childNodes->item($i)); 
        $i--; 
       } 
      } 
     } 
    } 
    return $limit; 
} 
관련 문제