सभी HTML टैग्स को php string से निकालें


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 ($ description2, ENT_QUOTES, 'UTF-8');, स्ट्रिप_टैग ($ डेटा) और काम नहीं करता

मैंने uft8_encode :) के साथ हल किया, लगता है कि स्ट्रिप_टैग htmlentities को ओवरराइड नहीं कर सकते हैं

क्या यह पृष्ठ को xss स्क्रिप्टिंग हमलों से भी सुरक्षित करेगा?
thekucays

1
@delive दुनिया में आप क्यों दौड़ेंगे htmlentitiesऔर फिर strip_tags? यह पूरी तरह से उद्देश्य को हरा देता है।
कप्तान हाइपरटेक्स्ट

यह कुछ प्रकार के जावास्क्रिप्ट को अवरुद्ध नहीं कर सकता है। इस समारोह से चमत्कार की उम्मीद मत करो।
पीजे ब्रुनेट

18

PHP की strip_tags () फ़ंक्शन का उपयोग करें ।

उदाहरण के लिए:

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


print($businessDesc);

2
यह पहले 100 अक्षर लेगा और उसके बाद html टैग हटाएगा। लेकिन मुझे लगता है कि ओपी पहले html टैग को हटाना चाहता है और उसके बाद 100 अक्षरों को।
योगेश सुथार

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

आउटपुट:

लोरम इप्सम केवल मुद्रण और टंकण उद्योग का डमी पाठ है।


1
लगभग। WhatWG का खंड 12.1.2.2.4 कहता </script >है कि मान्य अंतिम टैग है, लेकिन regex द्वारा संभाला नहीं जाता है। होनी चाहिए </\1\s*>या कुछ ऐसी।
बिशप

6

इस रेगेक्स का उपयोग करें: /<[^<]+?>/g

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

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

अपने उदाहरण से बने रहना चाहिए: Ref no: 30001


5
पट्टी_टैग है, रेगेक्स क्यों?

1
पूरी तरह से निश्चित नहीं है, लेकिन मुझे लगता है कि यह स्व-समापन टैग को नहीं पकड़ेगा जिसमें सफेद स्थान होते हैं: <br />या <special />। मुझे भी लगता है कि यह हैक <b<b>></</b>>को ध्यान में नहीं रखता है।
kaiser

मुझे लगता है कि कैसर इस जवाब का जिक्र कर रहे थे, न किstrip_tags
pjmil

यह PHP strip_tag से बेहतर उपाय है। PHP strip_tag HTML Script Element को खोलने और बंद करने दोनों को हटा देगा। हालाँकि, यदि आपका उपयोगकर्ता केवल प्रारंभिक HTML स्क्रिप्ट तत्व डालता है, तो PHP पट्टी_टैग इसे नहीं हटाएगा। तब आपका वेब पेज बहुत गलत प्रदर्शित होने की संभावना है। PHP संस्करण 5.6.19 के साथ परीक्षण किया गया। इस छोटे से रेगेक्स ने उन आंशिक एचटीएमएल टैगों को तय किया जो स्ट्रिप_टैग को मिस करने की समस्या पैदा कर सकते हैं। वाहवाही!
पिटे

समस्या यह है कि कभी-कभी उपयोगकर्ता अमान्य HTML लिखता है, इसलिए उदाहरण के लिए, <div क्लाइंट का नाम <div> hello> </ div>, और suing strip_tag सब कुछ हटा देगा ... और somes हम एक अधिक संरक्षित तरीका चाहते हैं, इसलिए मैं रेगेक्स के साथ जाऊंगा ... "क्योंकि स्ट्रिप_टैग्स () वास्तव में HTML को मान्य नहीं करता है, आंशिक या टूटे हुए टैग परिणाम में अपेक्षा से अधिक पाठ / डेटा को हटा सकते हैं।"
मिगेल

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

लार्वा में आप सिंटैक्स का उपयोग कर सकते हैं

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

इसे इस्तेमाल करे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.