Xóa tất cả các thẻ html khỏi chuỗi php


81

Tôi muốn hiển thị 110 ký tự đầu tiên của mục nhập cơ sở dữ liệu. Khá dễ dàng cho đến nay:

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

Nhưng mục nhập trên có mã html trong đó được nhập bởi khách hàng. Vì vậy, nó hiển thị:

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

Rõ ràng là không tốt.

Tôi chỉ muốn loại bỏ tất cả mã html, vì vậy tôi cần xóa mọi thứ giữa <và> khỏi mục nhập db THÌ hiển thị 100 ký tự đầu tiên.

Bất kỳ ý tưởng bất cứ ai?


đầu vào và đầu ra mẫu .........
Venkata Krishna

Câu trả lời:


141

sử dụng 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) . "..."; ?>

Tại sao không hoạt động? :( Tôi đang sử dụng: data = htmlentities ($ description2, ENT_QUOTES, 'UTF-8') ;, strip_tags ($ data) và không hoạt động

Tôi giải quyết với uft8_encode :), dường như strip_tags không thể ghi đè htmlentities

điều này cũng sẽ bảo vệ trang khỏi các cuộc tấn công tập lệnh xss?
thekucays

1
@delive Tại sao bạn lại chạy htmlentitiesvà sau đó strip_tags? Điều đó hoàn toàn đánh bại mục đích.
Captain Hypertext,

Nó có thể không chặn một số loại JavaScript. Đừng mong đợi điều kỳ diệu từ chức năng này.
PJ Brunet

18

Sử dụng hàm strip_tags () của PHP .

Ví dụ:

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


print($businessDesc);

2
Điều này đầu tiên sẽ lấy 100 ký tự và sau đó xóa các thẻ html. Nhưng tôi nghĩ OP muốn xóa các thẻ html trước tiên và sau đó là 100 ký tự.
Yogesh Suthar

1
@YogeshSuthar Rất đúng, tôi sẽ chỉnh sửa câu trả lời ngay bây giờ, cảm ơn bạn đã chỉ ra điều đó. - Xong
EM-Creations

11

Xóa tất cả các thẻ HTML khỏi chuỗi PHP có nội dung!

Giả sử bạn có chuỗi chứa thẻ neo và bạn muốn xóa thẻ này bằng nội dung thì phương pháp này sẽ hữu ích.

$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);
    
 }

Đầu ra:

Lorem Ipsum chỉ đơn giản là văn bản giả của ngành in ấn và sắp chữ.


1
Hầu hết. Phần 12.1.2.2.4 của WhatWG cho biết </script >là thẻ đóng hợp lệ, nhưng không được xử lý bởi regex. Nên </\1\s*>hoặc một số như vậy.
giám mục

6

sử dụng regex này: /<[^<]+?>/g

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

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

từ ví dụ của bạn nên ở lại: Ref no: 30001


5
dải_tag ở đó, tại sao lại là regex?

1
Không hoàn toàn chắc chắn, nhưng tôi nghĩ rằng nó sẽ không bắt các thẻ tự đóng có chứa khoảng trắng: <br />hoặc <special />. Tôi cũng nghĩ rằng điều này không tính đến các vụ hack <b<b>></</b>>.
kaiser

Tôi nghĩ kaiser đang đề cập đến câu trả lời này, không phảistrip_tags
pjmil

Đây là giải pháp tốt hơn so với PHP strip_tag. PHP strip_tag sẽ xóa cả phần tử HTML Script mở và đóng. Tuy nhiên, nếu người dùng của bạn chỉ đặt Phần tử tập lệnh HTML mở thì thẻ PHP strip_tag sẽ không xóa nó. Khi đó trang web của bạn rất có thể sẽ hiển thị sai hoàn toàn. Đã thử nghiệm với phiên bản PHP 5.6.19. Bản regex nhỏ này đã khắc phục những thẻ HTML từng phần có thể gây ra sự cố mà dải_tag sẽ bỏ lỡ. Hoan hô!
ptay

Vấn đề là đôi khi người dùng sẽ viết html không hợp lệ, vì vậy, ví dụ: <div Name of client <div>hello> </div> và kiện dải_tag sẽ xóa mọi thứ ... và somes chúng tôi muốn có một cách bảo vệ hơn, vì vậy tôi sẽ đi với regex ... "Bởi vì dải_tags () không thực sự xác thực HTML, các thẻ bị hỏng hoặc một phần có thể dẫn đến việc xóa nhiều văn bản / dữ liệu hơn mong đợi."
Miguel

2

Đối với tôi đây là giải pháp tốt nhất.

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

Trong laravel, bạn có thể sử dụng cú pháp sau

 @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); ?>

Hoặc nếu bạn có một nội dung đến từ cơ sở dữ liệu;

<?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);

Thử cái này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.