2011-10-05 11 views
8

मुझे PHP के htmlentities और यह वर्ण में कोई समस्या है। मुझे पता है कि यह कुछ प्रकार का एन्कोडिंग मुद्दा है जिसे मैं अभी देख रहा हूं, इसलिए उम्मीद है कि कोई देख सकता है कि मैं क्या गलत कर रहा हूं।htmlentities और é (e तीव्र)

चल रहा है एक सीधी htmlentities("é") सही कोड अपेक्षित ढंग से या तो é या é वापस नहीं करता है (। मैं चारसेट 'UTF-8' (htmlentities का चारसेट पैरामीटर), लेकिन एक ही बात का उपयोग करने के लिए मजबूर कोशिश की है।

अंतिम लक्ष्य यह है कि यह चरित्र 'आईएसओ -885 9 -1' में एन्कोड किए गए एक HTML ईमेल में भेजा गया है। जब मैं इसे उस एन्कोडिंग में मजबूर करने की कोशिश करता हूं, तो एक ही समस्या। ईमेल के स्रोत में, आप देखते हैं, और एचटीएमएल व्यू में é

मेरी गलती पर कुछ प्रकाश कौन छोड़ सकता है?

+0

कॉल करके देखें 'get_html_translation_table()' और जिसके परिणामस्वरूप सरणी को देखकर। यह आपको बताएगा कि आपके ई-तीव्र का अनुवाद किया जाना चाहिए या नहीं। यदि यह काम नहीं करता है, तो आप हमेशा यह तालिका प्राप्त कर सकते हैं, इसमें ई-एंट जोड़ सकते हैं और फिर एन्कोडिंग करने के लिए 'strtr ($ string, $ table)' का उपयोग कर सकते हैं। –

+0

सुनिश्चित करें कि आपकी फ़ाइल यूटीएफ -8 में एन्कोड की गई है, और सुनिश्चित करें कि आपके पास एन्कोडिंग वर्ण सही ढंग से सेट है। –

+0

यदि आप अपनी साइट एन्कोडिंग को यूटीएफ -8 पर सेट करते हैं (या तो '' टैग या http शीर्षलेख का उपयोग करके, आपको एन्कोड किए गए अक्षरों को एन्कोड करने की आवश्यकता नहीं होगी। – Spudley

उत्तर

11
// I assume that your page is utf-8 encoded 
header("Content-type: text/html;charset=UTF-8"); 

$in_utf8encoded = "é à ù è ò"; 

// first you need the convert the string to the charset you want... 
$in_iso8859encoded = iconv("UTF-8", "ISO-8859-1", $in_utf8encoded); 

// ...in order to make htmlentities work with the same charset 
$out_iso8859= htmlentities($in_iso8859encoded, ENT_COMPAT, "ISO-8859-1"); 

// then only to display in your page, revert it back to utf-8 
echo iconv("ISO-8859-1", "UTF-8", $out_iso8859); 
+0

धन्यवाद! 'Iconv' निश्चित मेरा ईमेल एन्कोडिंग मुद्दा। –

+0

आपका स्वागत है :) –

+0

एन्कोडिंग जोड़ना यहां महत्वपूर्ण है - खासकर यदि एचटीएमएलटीटी पहले आपके लिए काम करता है, और तोड़ दिया जाता है। पीएचपी टीम के पास एक बार * डिफ़ॉल्ट * को htmlentities में बदलने के लिए सरल विचार नहीं था, लेकिन दो बार। 5.4 से पहले, यह आईएसओ -885 9 -1 था। 5.4 के बाद और 5.6 से पहले यह यूटीएफ -8 था। 5.6 के अनुसार, यह भी है जो आपके php.ini में डिफ़ॉल्ट_चार्सेट सेटिंग कहता है। एक बार जब आप एन्कोडिंग निर्दिष्ट करते हैं, तो यह फिर से काम करेगा, कोई htmlspecialchars की आवश्यकता नहीं है।इसे ध्यान में रखें यदि आपने अचानक डेटा खो दिया है क्योंकि आपने दस्तावेज (!) डिफ़ॉल्ट पर भरोसा नहीं किया है। PHP हमेशा आश्चर्य से भरा है - और एक अच्छे तरीके से नहीं। – Aaa

2

मेरा सुझाव है कि आप http://php.net/html_entity_decode पर एक नज़र डालें। आप निम्नलिखित तरीके से इस का उपयोग कर सकते हैं: php फ़ाइल की एन्कोडिंग के बारे में देखभाल करने के लिए

$eacute = html_entity_decode("é",ENT_COMPAT,"iso-8859-1"); 

इस तरह से आप की जरूरत नहीं है। संपादित करें: टाइपो

+0

मैं डीकोड करने की कोशिश नहीं कर रहा हूं, मैं कोशिश कर रहा हूं एनकोड। कृपया पोस्ट करने से पहले प्रश्न पढ़ें। –

-3

यदि आपने विशेष वर्णों को संग्रहित किया है, तो आप database से कनेक्शन बनाने के तुरंत बाद निम्नलिखित का उपयोग कर सकते हैं।

mysql_set_charset('utf8', $dbHandler); 

इसके साथ, अब डेटा प्रदर्शित करते समय आपको htmlentities का उपयोग करने की आवश्यकता नहीं है।

+0

मुझे डेटाबेस के बारे में कुछ भी कहना याद नहीं है। –

+0

मुझे पता है, लेकिन मैं सुझाव देता हूं कि मेरे साथ उसी स्थिति में मेरे साथ काम किया। इस तरह से, यह सब कुछ एन्कोड करेगा डेटाबेस से खींचकर और 'htmlentities',' html_entity_decode', 'html_entity_encode' आदि जैसे अन्य php फ़ंक्शंस का उपयोग करने से बचें –

+0

मेरी स्थिति में किसी भी तरीके, आकार या फ़ॉर्म में डेटाबेस शामिल नहीं है। इस प्रकार डेटाबेस में किसी डेटाबेस का उल्लेख नहीं किया गया था ओपी। कृपया जल्दबाजी में पोस्ट करने से पहले पढ़ें। –

2

मैं htmlspecialchars जोड़ लिया है आप को देखने के लिए कि यह वास्तव में एन्कोड किया गया है

http://sandbox.phpcode.eu/g/11ce7/4

<?PHP 
echo htmlspecialchars(htmlentities("é", ENT_COMPAT | ENT_HTML401, "UTF-8")); 
संबंधित मुद्दे