2011-06-23 12 views
5

हमारे पास एक वेब एप्लिकेशन है जहां हम उपयोगकर्ताओं को टेक्स्ट क्षेत्र में अपना स्वयं का HTML दर्ज करने की अनुमति देते हैं। हम उस डेटा को हमारे डेटाबेस में सहेजते हैं।htmlentities() चीनी अक्षरों को अनुपयोगी बनाता है

जब हम टेक्स्ट क्षेत्र में एचटीएमएल डेटा लोड करते हैं, तो हम HTML डेटा को टेक्स्टरेरा में फेंकने से पहले htmlentities() का उपयोग करते हैं। अन्यथा उपयोगकर्ता textarea के अंदर सहेज सकते हैं और टेक्स्टरेरा में लोड करते समय हमारा एप्लिकेशन टूट जाएगा।

यह चीनी काम करता है (और शायद अरबी, जापानी जैसी अन्य भाषाओं) को छोड़कर यह बहुत अच्छा काम करता है।

htmlentities() चीनी पाठ को इस तरह अनुपयोगी बनाता है: à ¨à ³à ¼à §ï जब मैं टेक्स्ट क्षेत्र में दर्ज HTML को लोड करने से पहले htmlentities() को हटा देता हूं, तो चीनी वर्ण बस ठीक दिखाएं, लेकिन फिर हमारे पास HTML टेक्स्ट की समस्या है जो हमारे टेक्स्टरेरा में हस्तक्षेप करती है, खासकर जब कोई उपयोगकर्ता टेक्स्ट एरिया में प्रवेश करता है।

मुझे उम्मीद है कि यह समझ में आता है।

क्या किसी को पता है कि कैसे हम अपने टेक्स्ट क्षेत्र के अंदर किसी भी एचटीएमएल को लोड करने के लिए सुरक्षित होने के दौरान चीनी, जापानी, ... जैसे हमारे सुरक्षित क्षेत्र में सुरक्षित रूप से और सही ढंग से भाषाओं को अनुमति दे सकते हैं?

+3

'charset' पैरामीटर निर्दिष्ट करने का प्रयास करें – Robik

+0

आप किस वर्ण एन्कोडिंग का उपयोग कर रहे हैं? – GordonM

+0

आपके पृष्ठ के लिए कौन सा चरित्र सेट परिभाषित किया गया है? –

उत्तर

5

आप htmlspecialchars उपयोग करने की कोशिश की है?

मैं वर्तमान में उत्पादन में इसका उपयोग करता हूं और यह ठीक है।

$foo = "我的名字叫萨沙" 
echo '<textarea>' . htmlspecialchars($foo) . '</textarea>'; 

वैकल्पिक रूप से,

$str = “&#20320;&#22909;”; 
echo mb_convert_encoding($str, ‘UTF-8′, ‘HTML-ENTITIES’); 

http://www.techiecorner.com/129/php-how-to-convert-iso-character-htmlentities-to-utf-8/

2

वर्णमाला निर्दिष्ट करें, उदा। यूटीएफ -8 और इसे काम करना चाहिए।

echo htmlentities($data, ENT_COMPAT, 'UTF-8'); 
+0

यह भी काम करता है, लेकिन हमें पहले से ही हमारा उत्तर मिल गया है। मदद करने के लिए धन्यवाद! – Jorre

2

पीएचपी अंतर्राष्ट्रीय वर्ण सेट के लिए ढांचे में व्यापक समर्थन के मामले में बहुत भयावह है (हालांकि यह धीरे-धीरे बेहतर हो रही है, विशेष रूप से PHP5 में है, लेकिन जो संस्करण उपयोग कर रहे आपके द्वारा निर्दिष्ट नहीं है)। यद्यपि आपकी मदद करने के लिए कुछ mb_ (मल्टीबाइट, मल्टीबाइट वर्णों में) फ़ंक्शन हैं।

यह उदाहरण आपको (here से) मदद मिल सकती है:

<?php 
/** 
* Multibyte equivalent for htmlentities() [lite version :)] 
* 
* @param string $str 
* @param string $encoding 
* @return string 
**/ 
function mb_htmlentities($str, $encoding = 'utf-8') { 
    mb_regex_encoding($encoding); 
    $pattern = array('<', '>', '"', '\''); 
    $replacement = array('&lt;', '&gt;', '&quot;', '&#39;'); 
    for ($i=0; $i<sizeof($pattern); $i++) { 
     $str = mb_ereg_replace($pattern[$i], $replacement[$i], $str); 
    } 
    return $str; 
} 
?> 

इसके अलावा, सुनिश्चित करें कि आपके पृष्ठ पर एक ही वर्ण सेट को निर्दिष्ट किया गया है। आप एक मेटा टैग के साथ ऐसा कर सकते हैं:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
0

सबसे अधिक संभावना आप सही एन्कोडिंग का उपयोग नहीं कर रहे हैं पर पाया जाता है। यदि आप पहले से ही अपने आउटपुट एन्कोडिंग को जानते हैं, तो html_entities function के तर्क का उपयोग करें।

यदि आप अभी तक एक आंतरिक एन्कोडिंग पर बस नहीं गए हैं, तो iconv फ़ंक्शंस पर एक नज़र डालें; iconv_set_encoding("internal_encoding", "UTF-8"); एक अच्छी शुरुआत हो सकती है।

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