2009-12-22 11 views
8

में मैं एक स्ट्रिंग है कि इसएनकोड HTML निकाय लेकिन HTML टैग की अनदेखी - पीएचपी

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
htmlentities($str,ENT_COMPAT,'UTF-8',false); 

कैसा लग सकता है कैसे मैं HTML टैग परिवर्तित किए बिना HTML संस्थाओं के लिए पाठ में बदल सकते हैं?

ध्यान दें: मैं HTML बरकरार रखने की जरूरत है

+0

संभावित डुप्लिकेट: http://stackoverflow.com/q/1364933/1032370 –

उत्तर

-1

आप केवल पाठ परिवर्तित करने के लिए इसका मतलब है, तो इस कोशिश:

$orig = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
$str = strip_tags($orig); 

$str = htmlentities($str,ENT_COMPAT,'UTF-8',false); 
0

मैंने पहले htmlentities का उपयोग नहीं है, लेकिन यह की तरह लगता है urlencode का एक और अधिक मजबूत संस्करण (जो मैं बहुत उपयोग करता हूं)। आप कोशिश करना चाहते हो सकता है:

htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);

बस एक छोटे से डला के रूप में, यदि आप <br> मानक carrage रिटर्न के रूप में सुरक्षित रखना चाहते हैं, तो आप ऐसा कर सकते हैं:

htmlentities(strip_tags(str_replace("<br>","\n",$str,ENT_COMPAT)),'UTF-8',false);

मुझे पता है कि कुछ मैं कभी-कभी करना पसंद करता हूं।

गुड लक।

+0

urlencode और htmlentities अलग-अलग चीजें करते हैं: urlencode स्ट्रिंग को यूआरएल में डालने के लिए मान्य बनाता है (उदा। मोड़ना और% 26 में), एचटीएमएलटीटी एचटीएमएल में उपयोग के लिए एक सिंग से बच निकलता है (उदाहरण के लिए <में बदलना)। –

6

अस्वीकरण: <,> और & को छोड़कर, मैं किसी भी इकाई को एन्कोड नहीं करता। जैसा कि कहा गया है, अगर आप वास्तव में इस चाहते हैं, ऐसा करते हैं:

$str = '...'; 
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
+1

मैं इसके साथ भी जाऊंगा, ज्यादातर बार "और" एन्कोड करने की आवश्यकता नहीं होती है। और सामान जैसे सामान, पहले से ही यूनिकोड द्वारा संभाला जाना चाहिए। –

+2

इसके अलावा जब वह "2> 5 "अपने मार्कअप – TravisO

+0

@TravisO में: मुझे उम्मीद है कि इनपुट पहले से ही वैध HTML हो। अगर उसके पास मार्कअप में 2> 5 है, तो इसे ठीक से संभाला नहीं जाएगा << सही ढंग से संभाला नहीं जाता है। – Evert

1

समस्या यह है कि आप का सामना करना पड़ता है, उस परिस्थिति में आप पहले से ही '<' और अपने पाठ में '>' इनकोडिंग है तो आप रूपांतरण के बाद उन्हें फ़िल्टर करने के लिए।

यह एवर्ट के जवाब देने के लिए समान है, लेकिन एक और कदम अपने मार्कअप में 1 < 2 की तरह सामग्री के लिए अनुमति देने के लिए कहते हैं:

$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
$str = str_replace(array('&amp;lt;','&amp;gt'),array('&lt;','&gt;'), $str); 
1

एक अच्छा जवाब था Pascal MARTIN

द्वारा पोस्ट इस SO topic

देखें

फिर से शुरू करने के लिए, आप संप्रेषण की सूची पुनर्प्राप्त करने के लिए कोड के इस टुकड़े का उपयोग कर सकते हैं character => entity:

$list = get_html_translation_table(HTML_ENTITIES); 
unset($list['"']); 
unset($list['<']); 
unset($list['>']); 
unset($list['&']); 
संबंधित मुद्दे