2012-05-27 17 views
16

मैं कैसे जांच सकता हूं कि PHP स्ट्रिंग सामग्री में कोई HTML सामग्री है या नहीं?जांचें कि स्ट्रिंग सामग्री में कोई HTML है या नहीं?

मैं नियमित अभिव्यक्तियों के साथ अच्छा नहीं हूं इसलिए मैं इसे देखने के लिए "is_html" नामक फ़ंक्शन रखना चाहता हूं। :) धन्यवाद!

+2

तुम्हारा क्या मतलब है "html सामग्री"? – Sebas

+0

त्वरित Google खोज http://preprocess.me/comment/91 – mcgrailm

+0

एचटीएमएल टैग, विशिष्ट HTML वर्ण जैसे <, >, ", ', = –

उत्तर

25

आप अगर एक स्ट्रिंग एक "<something>", (जो आलसी है, लेकिन आप के लिए काम कर सकते हैं) शामिल हैं परीक्षण करने के लिए, आप ऐसा ही कुछ करने की कोशिश कर सकते हैं:

function is_html($string) 
{ 
    return preg_match("/<[^<]+>/",$string,$m) != 0; 
} 

संपादित करें: आपको नीचे केविन ट्रैस उत्तर पर एक नज़र डालना चाहिए। उसका रेगेक्स शायद कम झूठी सकारात्मक लौटाएगा।

+2

किसी रेगिक्स का उपयोग करके पता लगाने के लिए कि क्या कोई टैग मौजूद है, थोड़ा अधिक है ... –

+0

क्या आप किसी भी तरह से इस अभिव्यक्ति को रेगेक्स के बिना प्रस्तुत करने के बारे में जानते हैं? मैं एक ही अभिव्यक्ति का उपयोग कर रहा हूं, और रेगेक्स बनाम गैर-रेगेक्स के अंतर का उत्सुक हूं। – onassar

+0

सरल, उत्तम दर्जे का, अच्छा हैक, मुझे पसंद है। – Kzqai

-2

यह उस चीज़ पर निर्भर करता है जिसे आप HTML सामग्री मानते हैं।

सबसे सरल बात

<html.*> 

PHP में परीक्षण

if (preg_match('/<html.*>/', $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 

हो जाएगा आप देखना चाहते हैं, तो स्ट्रिंग HTML टैग जो regex के साथ किया जा सकता है परीक्षण करने के लिए है आपके पास एचटीएमएल पार्सर का उपयोग करने के लिए वैध एचटीएमएल बेहतर है।

+0

मेरा मतलब है कि मेरे पास कोई HTML टैग है जो कर्सर <>, =, और किसी भी किंड का उद्धरण है! –

+2

एचएम, उपरोक्त उत्तर परीक्षण करेगा कि एचटीएमएल टैग मौजूद है – buckley

+0

तकनीकी और व्यावहारिक रूप से, टैग अब html5 में आवश्यक नहीं है ... – Kzqai

8

शायद सबसे आसान तरीका की तरह कुछ होगा:

<?php 

function hasTags($str) 
{ 
    return !(strcmp($str, strip_tags($str)) == 0); 
} 

$str1 = '<p>something with <a href="/some/url">html</a> in.'; 
$str2 = 'a string.'; 

var_dump(hasTags($str1)); // true - has tags. 
var_dump(hasTags($str2)); // false - no tags. 
+1

यह झूठी झंडे का कारण बनता है। उदाहरण के लिए स्ट्रिंग लें 'I <3 PHP'। यह फ़ंक्शन यह निर्धारित करेगा कि टैग करें मौजूद, जब वे नहीं करते हैं। – buggedcom

+0

हम्म, लेकिन utf-8 पाठ पर scrcmp त्रुटि होगी, जैसे कई स्ट्रिंग फ़ंक्शन करते हैं? – Kzqai

1

यहाँ है कि मैं क्या

function isHtml($string){ 
    preg_match("/<\/?\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/",$string, $matches); 
    if(count($matches)==0){ 
     return FALSE; 
     }else{ 
     return TRUE; 
     } 
} 

के साथ आया था तुम सिर्फ एक स्ट्रिंग पारित और देखें कि क्या यह सही या गलत रिटर्न है। इतना सरल है।

function isHtml($string) 
    { 
     if ($string != strip_tags($string)) 
     { 
      return true; // Contains HTML 
     } 
     return false; // Does not contain HTML 
    } 

यहाँ मैं एक PHP समारोह strip_tags का उपयोग स्ट्रिंग से किसी भी HTML दूर करने के लिए:

10
बजाय (यहाँ अन्य सुझावों की तरह) regex का उपयोग कर के मैं निम्न विधि का उपयोग

। यह तब तारों की तुलना करता है और यदि वे HTML टैग से मेल नहीं खाते हैं तो मौजूद थे।

+1

'strlen' वहां आवश्यक नहीं है। – Red

+1

अच्छा बिंदु @Red। मैंने कोड से 'strlen' हटा दिया है, भले ही यह न्यूनतम प्रक्रिया को बचाता है। रचनात्मक प्रतिक्रिया के लिए धन्यवाद। –

+0

फ़ंक्शन कभी भी झूठी – paulo62

5

स्वीकृत उत्तर एक स्ट्रिंग पर विचार करेगा जिसमें < कुछ > HTML के रूप में होगा, जाहिर है, यह नहीं है।

मैं निम्नलिखित का उपयोग करता हूं, जो एक बेहतर विचार हो सकता है या नहीं भी हो सकता है। (टिप्पणियाँ की सराहना की।)

function isHTML($str) { return preg_match("/\/[a-z]*>/i", $str) != 0; } 

यह किसी भी युक्त /> स्लेश और समापन कोष्ठक के बीच शून्य या अधिक पत्र के साथ स्ट्रिंग के लिए लग रहा है।

ऊपर समारोह रिटर्न:

<something>    is NOT HTML 
<b>foo</b>    is HTML 
<B>foo</B>    is HTML 
<b>foo<b>    is NOT HTML 
<input />    is HTML 
+2

मुझे लगता है कि आपका रेगेक्स बेहतर है। मैं अपना जवाब संपादित करूंगा। – nico

+0

मैं शायद वहां '+' का उपयोग करूंगा क्योंकि '' HTML नहीं है। अन्यथा, बहुत अच्छी अवधारणा! – gooli

+0

@ गुली - '+' के साथ, यह '' से मेल नहीं खाता – nico

संबंधित मुद्दे