2012-09-18 59 views
5

में नए लगातार ENT_DISALLOWED एक स्ट्रिंग मैं एक htmlencoded तरह से उत्पादन करने के लिए कोशिश कर रहा हूँ है, और htmlentities() function का उपयोग कर हमेशा एक खाली स्ट्रिंग देता है।php 5.4 के htmlentities

मुझे पता है कि ऐसा क्यों करता है। खैर, मैं PHP 5.4 नहीं चला रहा हूं मुझे नवीनतम PHP 5.3 स्वाद स्थापित किया गया है।

सवाल यह है कि मैं एक स्ट्रिंग जो अवैध कोड इकाई दृश्यों है htmlencode करने में सक्षम होने वाला हूं।

मैनुअल के अनुसार, ENT_SUBSTITUTE जाने का रास्ता है। लेकिन यह स्थिर PHP 5.3.X में परिभाषित नहीं है।

if (!defined('ENT_SUBSTITUTE')) { 
    define('ENT_SUBSTITUTE', 8); 
} 

फिर भी प्रयास विफल:

मैं ऐसा किया। htmlentities अभी भी खाली स्ट्रिंग लौट रहा है।

मैं बजाय ENT_DISALLOWED की कोशिश करना चाहता था, लेकिन मैं इसके लिए उसके संगत लंबे मूल्य नहीं मिल रहा।

तो मेरे सवाल का दो

  1. पीएचपी 5.4 के ENT_DISALLOWED की निरंतर मूल्य क्या है मुड़ा हुआ है?

  2. मैं कैसे सुनिश्चित कर सकता हूं कि गैर यूटीएफ -8 अक्षरों (जैसे smart quotes) वाली स्ट्रिंग को उनमें से साफ़ किया जा सकता है? - केवल स्मार्ट कोट्स नहीं बल्कि कुछ भी जो htmlentities() को रिक्त स्ट्रिंग वापस करने का कारण बनता है।

उत्तर

2

तुम कहते हो, इन स्थिरांक were added5.4.0 में। बात यह है कि समर्थन 5.4.0 पर भी नया है। मतलब आप जो भी मूल्य चाहते हैं उसे पारित कर सकते हैं, पुराने htmlentities इसे समझ नहीं पाएंगे।

जैसा कि यह संभवतया मामला है, php changelog काफी भ्रामक है।

3

यह सच है कि htmlentities() PHP 5.3 में ENT_SUBSTITUTE ध्वज नहीं है, हालांकि इसमें ENT_IGNORE ध्वज है (हालांकि वास्तव में सुझाव नहीं दिया गया है)। नोट से सावधान रहें और उपयोग से पहले इसे समझने का प्रयास करें:

इस ध्वज का उपयोग » may have security implications के रूप में निराश है।

यह बहुत बेहतर है कि आप समझते हैं कि पहली बार इनपुट स्ट्रिंग में कोई समस्या क्यों है। अक्सर उपयोगकर्ता केवल सही एन्कोडिंग निर्दिष्ट करने के लिए गायब हैं।

उदा। पहले यूटीएफ -8 में स्ट्रिंग को फिर से एन्कोड करें, फिर इसे htmlspecialchars() या htmlentities() पर पास करें। स्मार्ट-कोट्स की बात करते हुए आप शायद विंडोज -1252 एन्कोडेड स्ट्रिंग का उपयोग कर रहे हैं। तुम भी परिवर्तित करने के लिए है कि उपयोग करने से पहले एक, तो आप सिर्फ चारसेट ठीक से निर्दिष्ट कर सकते हैं की जरूरत नहीं होगी (पीएचपी 5.3):

htmlentities($string, ENT_QUOTES, $encoding = 'Windows-1252'); 

स्वाभाविक रूप से यह केवल काम करता है इनपुट $string में एन्कोड किया गया है, तो Windows-1252 (CP1252)।पहले सही एन्कोडिंग का पता लगाएं, तो यह आमतौर पर कोई समस्या नहीं है। गैर-समर्थित एन्कोडिंग के लिए पहले समर्थित एक में फिर से एन्कोड करें, उदाहरण के लिए iconv या mb_string के साथ।

+0

यदि कोई इसे ढूंढने के लिए होता है क्योंकि वे Lynda.com MYSQL आवश्यक प्रशिक्षण का पालन कर रहे हैं और Sid.php में लाइन 600 पर "अपरिभाषित स्थिर ENT_SUBSTITUTE" त्रुटि का उपयोग करते हैं, तो मैं आपको जो पढ़ता हूं उसके आधार पर आपको बताऊंगा और मुझे PHP 5.3 के लिए स्पष्ट समकक्ष ध्वज नहीं मिला, मैं आगे बढ़ गया और उस ध्वज को हटा दिया और ऐप अभी ठीक काम करता है। @hakre के रूप में सुरक्षा प्रभाव हैं, लेकिन मैं एक स्थानीय विकास सर्वर पर काम कर रहा हूं जिसमें वेब तक पहुंच नहीं है। –