PHP 문자열에서 모든 HTML 태그 제거


81

데이터베이스 항목의 처음 110자를 표시하고 싶습니다. 지금까지는 매우 쉽습니다.

<?php echo substr($row_get_Business['business_description'],0,110) . "..."; ?>

그러나 위 항목에는 클라이언트가 입력 한 html 코드가 있습니다. 따라서 다음과 같이 표시됩니다.

<p class="Body1"><strong><span style="text-decoration: underline;">Ref no:</span></strong> 30001<strong></stro...

분명히 좋지 않습니다.

모든 html 코드를 제거하고 싶기 때문에 db 항목에서 <와> 사이의 모든 것을 제거하고 처음 100자를 표시합니다.

누구 아이디어?


샘플 입출력 .........
벤 카타 크리

답변:


141

사용하다 strip_tags

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);   //output Test paragraph. Other text

<?php echo substr(strip_tags($row_get_Business['business_description']),0,110) . "..."; ?>

왜 작동하지 않습니까? :( 내가 사용하고 있습니다 : 데이터 =를 htmlentities ($ 내용 입력란이, ENT_QUOTES는, 'UTF-8'), strip_tags ($ 데이터)가 아닌 작품

내가 :) uft8_encode 해결할 strip_tags이를 htmlentities를 재정의 할 수 없습니다 보인다

이것이 xss 스크립팅 공격으로부터 페이지를 보호 할 수도 있습니까?
thekucays

1
세상에서 당신이 실행됩니다 왜 @delive htmlentities다음과 strip_tags? 그것은 목적을 완전히 무너 뜨립니다.
캡틴 하이퍼 텍스트

특정 종류의 JavaScript를 차단하지 않을 수 있습니다. 이 기능에서 기적을 기대하지 마십시오.
PJ Brunet

18

PHP의 strip_tags () 함수를 사용 합니다.

예를 들면 :

$businessDesc = strip_tags($row_get_Business['business_description']);
$businessDesc = substr($businessDesc, 0, 110);


print($businessDesc);

2
이것은 먼저 100자를 취하고 그 후에 html 태그를 제거합니다. 그러나 나는 OP가 먼저 html 태그를 제거하고 그 후 100 문자를 제거하고 싶다고 생각합니다.
Yogesh Suthar 2013

1
@YogeshSuthar 매우 사실입니다. 지금 답변을 편집하겠습니다. 지적 해 주셔서 감사합니다. -완료
EM-Creations

11

내용이있는 PHP 문자열에서 모든 HTML 태그를 제거하십시오!

문자열에 앵커 태그가 포함되어 있고 콘텐츠와 함께이 태그를 제거하려는 경우이 방법이 도움이됩니다.

$srting = '<a title="" href="https://stackoverflow.com/index.html"><b>Some Text</b></a>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.';

echo strip_tags_content($srting);

function strip_tags_content($text) {

    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
    
 }

산출:

Lorem Ipsum은 인쇄 및 조판 업계의 더미 텍스트입니다.


1
거의. WhatWG의 섹션 12.1.2.2.4</script > 는 유효한 종료 태그 라고 말하지만 정규식에 의해 처리되지 않습니다. 그럴 것 </\1\s*>입니다.
비숍

6

이 정규식을 사용하십시오. /<[^<]+?>/g

$val = preg_replace('/<[^<]+?>/g', ' ', $row_get_Business['business_description']);

$businessDesc = substr(val,0,110);

귀하의 예에서 유지되어야합니다. Ref no: 30001


5
strip_tags가 있는데 왜 정규식입니까?

1
완전히 확실하지는 않지만 공백이 포함 된 자동 닫힘 태그 <br />또는 <special />. 나는 또한 이것이 같은 해킹 <b<b>></</b>>을 고려 하지 않는다고 생각 합니다.
kaiser 2014

나는 카이저가이 대답을 언급 한 것이 아니라고 생각한다strip_tags
pjmil

이것은 PHP strip_tag보다 나은 솔루션입니다. PHP strip_tag는 열기 및 닫기 HTML 스크립트 요소를 모두 제거합니다. 그러나 사용자가 여는 HTML 스크립트 요소 만 넣으면 PHP strip_tag가이를 제거하지 않습니다. 그러면 웹 페이지가 완전히 잘못 표시 될 가능성이 큽니다. PHP 버전 5.6.19로 테스트되었습니다. 이 작은 정규식은 strip_tag가 놓칠 문제를 일으킬 수있는 부분 HTML 태그를 수정했습니다. 브라보!
ptay

문제는 때때로 사용자가 잘못된 html을 작성한다는 것입니다. 예를 들어 <div Name of the client <div> hello> </ div>, strip_tag를 고소하면 모든 것이 제거됩니다. 그래서 정규식으로 갈 것입니다. "strip_tags ()는 실제로 HTML의 유효성을 검사하지 않기 때문에 부분적이거나 손상된 태그는 예상보다 더 많은 텍스트 / 데이터를 제거 할 수 있습니다."
Miguel

2

내 경우 이것이 최상의 솔루션입니다.

function strip_tags_content($string) { 
    // ----- remove HTML TAGs ----- 
    $string = preg_replace ('/<[^>]*>/', ' ', $string); 
    // ----- remove control characters ----- 
    $string = str_replace("\r", '', $string);
    $string = str_replace("\n", ' ', $string);
    $string = str_replace("\t", ' ', $string);
    // ----- remove multiple spaces ----- 
    $string = trim(preg_replace('/ {2,}/', ' ', $string));
    return $string; 

}

0

laravel에서는 다음 구문을 사용할 수 있습니다.

 @php
   $description='<p>Rolling coverage</p><ul><li><a href="http://xys.com">Brexit deal: May admits she would have </a><br></li></ul></p>'
 @endphp
 {{  strip_tags($description)}}

0

<?php $data = "<div><p>Welcome to my PHP class, we are glad you are here</p></div>"; echo strip_tags($data); ?>

또는 데이터베이스에서 가져온 콘텐츠가있는 경우

<?php $data = strip_tags($get_row['description']); ?> <?=substr($data, 0, 100) ?><?php if(strlen($data) > 100) { ?>...<?php } ?>


0
$string = <p>Awesome</p><b> Website</b><i> by Narayan</i>. Thanks for visiting enter code here;
$tags = array("p", "i");

echo preg_replace('#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?</\1>#s', '', $string);

이 시도

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.