저는 블로그를 쓰고 있으며 게시물의 발췌 내용을 보여주는 함수가 필요합니다. 텍스트가 503 자보다 긴 경우 부분 문자열 검사를 사용하고 있습니다.문장을 짧게하고 가장 가까운 점을 찾습니다.
하지만이 방법은 내 텍스트를 단어 중간과 HTML 태그 중간에 자르기 때문에 나머지 페이지는 태그 절반으로 작성합니다.
즉 : 그것은 새로운 강력한 엔드 태그 안타까지 "text text text <strong>Another piece of te [...]
과 페이지의 나머지 부분은 강한
내 텍스트 일부 게시물의 요소 만 않은 형식을 제거하려고
방법.. "좋아, 텍스트는 980 자이며, 마지막 점 (.)으로 이동하거나 태그를 완성하는 데 필요한 것은 무엇이든간에 503 자로 자른다.
<?php
$testo_preview = preg_replace("/<img[^>]+\>/i", ' ', $valore->testo);
$testo_preview = preg_replace("/<a[^>]+>/i", '<a>', $testo_preview);
$testo_preview = preg_replace("/<span[^>]+>/i", '<span>', $testo_preview);
$testo_preview = preg_replace("/<div[^>]+>/i", '', $testo_preview);
$testo_preview = str_replace("</div>", '', $testo_preview);
$testo_preview = str_replace("\n", '<br>', $testo_preview);
?>
<?php if(strlen($testo_preview) >= 503): ?>
<?= substr($testo_preview, 0, 503).' [...]' ?>
<?php else: ?>
<?= $testo_preview; ?>
<?php endif; ?>
편집 :
내 현재 코드 따릅니다 나는 실제로 "지점에 도달"로, 확인 작업을 할 파블의 대답을 찾을
을 ...
새로운 DOMDocument() 부분은 html 악센트를 엉망으로 만들었습니다 (이탈리아어에서는 몇 가지 악센트를 사용하고 머물러야했습니다). 나는 Tigger의 코드를 사용하여 함수로 변환 했으므로 둘 다 upvoted. 나는 쉬운 기능을 함께했다 :
function cleanCut($cutAt, $str){
$next_dot = strpos($str, '.', $cutAt);
if ($next_dot !== false){
// text after default cutoff contains a dot so we need to extend the cutoff
$preview_text = substr($str, 0, $next_dot + 1);
// HTML Cleanup
$preview_text = strip_tags($preview_text);
$preview_text = str_replace("\n", '<br>', $preview_text);
} else {
$preview_text = $str;
}
return $preview_text;
}
그것은 잘 좋은 작동합니다. 때로는 (긴 링크가있을 때) 요점에 도달하지는 않지만 괜찮을 수 있습니다. 지금 내가 실제로 원하는 유일한 태그 인 것처럼 <br>
으로 \n
을 바꾸려고 시도한 기능에서 알 수 있듯이 작동하지만 작동하지 않습니다. 왜 어떤 생각?
http://stackoverflow.com/a/1732454/1180785 – Dave
편집 후 : strip_tags'로 변경'strip_tags ($의 preview_text)'($의 preview_text, '
') '과 다음 줄을 제거합니다. [PHP 매뉴얼] (http : // php.net/strip_tags)'strip_tags()에 대한 더 많은 정보를 얻으려면 – Tigger