2012-04-11 11 views
6

में विशेष वर्ण स्टोर करने के लिए PHP का उपयोग करना, सबसे अच्छा तरीका है, एक MSQUL डेटाबेस में (निम्नलिखित की तरह) विशेष वर्ण स्टोर करने के लिए इंजेक्शन से बचने के लिए क्या है। , मेरे सारे पाठ HTML संस्थाओं में स्वरूपित हैसही पीएचपी विधि MySQL DB

$query=//DB query to select the text 
$fetch=//The fetch of $book_text 
$book_text=html_entity_decode($book_text); 

इस तरह:

« " ' é à ù 

यह मैं इसे कैसे अब क्या है:

$book_text=$_POST['book_text']; 
$book_text=htmlentities($book_text, "ENT_QUOTES"); 
$query=//DB query to insert the text 

तो। लेकिन मुझे लगता है कि यह बहुत सारी डेटाबेस स्थान लेता है। तो, क्या कोई बेहतर तरीका है?

+2

utf8 आपका मित्र –

+0

'" ENT_QUOTES "को' ENT_QUOTES "होना चाहिए (उद्धरण के बिना) क्योंकि यह एक PHP पूर्वनिर्धारित निरंतर है। और मैंने सोचा कि आप इसे डीबी में कच्चे रख सकते हैं और जब आप इसे गूंजना चाहते हैं तो आप डेटाबेस collation में 'htmlentities' –

उत्तर

6

उपयोग utf8 एन्कोडिंग इन मूल्यों को स्टोर करने के लिए।

इंजेक्शन से बचने के लिए mysql_real_escape_string() (या तैयार बयान) का उपयोग करें।

से बचाने के लिए XSShtmlspecialchars का उपयोग करें।

+0

utf8 का उपयोग करते हैं? –

+0

utf8 टेबल कॉलम 'एन्कोडिंग – Botanick

+1

के रूप में आप mysql_real_escape_string() तैयार कथन के साथ तुलना नहीं कर सकते हैं। यह कार्य इंजेक्शन से बचने के लिए नहीं है, और अकेले उनके खिलाफ मदद नहीं कर सकता है। –

1

ऐसा लगता है कि यूटीएफ 8 को PHP और MySQL के साथ संभालने और संग्रहीत करने के लिए आपके प्रश्न को सामान्यीकृत किया जा सकता है।

एसक्यूएल इंजेक्शन से सुरक्षित होने के लिए, आप तैयार बयान का उपयोग करना चाहिए। mysqli और PDO ड्राइवर दोनों उनका समर्थन करते हैं।

तैयार बयानों स्वचालित रूप से, चालक द्वारा उद्धृत कर रहे हैं, ताकि आप इस बारे में चिंता करने की जरूरत नहीं है।

आपकी डेटाबेस टेबल को चरित्र सेट utf8 और utf8_general_ci संयोजन के साथ बनाया जाना चाहिए।

[mysqld] 
default-character-set=utf8 
default-collation=utf8_general_ci 
character-set-server=utf8 
collation-server=utf8_general_ci 
init-connect='SET NAMES utf8' 

[client] 
default-character-set=utf8 

पता है कि पीएचपी UTF8 के आम तौर पर अनजान है रहो, ताकि आप स्ट्रिंग से निपटने के लिए या तो iconv या mbstring पुस्तकालयों का उपयोग करने के लिए ध्यान रखना चाहिए: ये my.cnf सेटिंग्स आपके MySQL सर्वर के माध्यम से सभी UTF8 चलाता है सुनिश्चित करेगा। एक अच्छा अवलोकन के लिए PHPWACT देखें।

सुनिश्चित करें कि पीएचपी के आंतरिक वर्ण सेट यूनिकोड को

iconv_set_encoding('internal_encoding', 'UTF-8'); 
mb_internal_encoding('UTF-8'); 

आपको यह भी सुनिश्चित ब्राउज़र या तो सही हेडर भेजने या चारसेट के लिए एक <meta> टैग जोड़कर एन्कोडिंग जानता बनाना चाहिए निर्धारित है।

ऐसा करना चाहिए।

0

आपका प्रश्न भ्रम का जुर्माना संग्रह है। आप सब कुछ भ्रमित करने में कामयाब रहे।
की यह सुलझाने के लिए कोशिश करते हैं।

PHP का उपयोग, इंजेक्शन से बचने के लिए, एमएसक्यूएल डेटाबेस में विशेष वर्णों (जैसे निम्न) को स्टोर करने का सबसे अच्छा तरीका क्या है।

इन अतुलनीय मामला नहीं है। विशेष वर्ण भंडारण एक मामला है और इंजेक्शन से परहेज करना एक और है। पूरी तरह से अलग एक।

$book_text=htmlentities($book_text, "ENT_QUOTES"); 

यह सबसे मजेदार हिस्सा है। हालांकि यह आपके प्रश्नों की रक्षा करने का इरादा है, यह वास्तव में कुछ भी नहीं करता है। क्योंकि निरंतर ENT_QUOTES की मान 3 है जो आप स्ट्रिंग ENT_QUOTES का उपयोग कर रहे हैं जो संख्यात्मक मान 0 है, इसलिए, आप कोई ध्वज सेट नहीं कर रहे हैं।

लेकिन यदि आप इस ध्वज को सही ढंग से सेट करते हैं, तो यह स्वचालित रूप से आपकी सुरक्षा नहीं करेगा। क्योंकि इंजेक्शन कोड में कोई विशेष वर्ण नहीं हो सकता है।

इंजेक्शन से बचने के लिए, आपको नियमों का सेट का पालन करना होगा, एक साधारण कार्य "make_my_data_safe()" नहीं। कोई जादू की छड़ी नहीं है। विवरण के लिए
this my answer देखें।

विशेष के लिए, यह आसान है। एकमात्र समस्या है कि कोई ठोस विशेष वर्ण सेट नहीं है। विभिन्न वातावरण के लिए विभिन्न विशेष वर्ण हैं।

  • 'डेटाबेस और HTML
  • < लिए मायने रखने> HTML केवल
  • é एक यू केवल HTML लिए मायने रखने के लिए अर्थ है, एन्कोडिंग पर निर्भर करता है।

आपने प्रत्येक मामले के लिए अलग-अलग स्वरूपण नियमों का उपयोग किया है। अलग, सभी के लिए एक भी नहीं।

एचटीएमएल के साथ वर्णों का उपयोग करने के लिए आपको उचित HTTP शीर्षलेख सेट करना होगा। डेटाबेस के साथ उपयोग करने के लिए आपको utf8 पर अपना टेबल एन्कोडिंग सेट करना होगा और यूटीएफ 8 के लिए कनेक्शन एन्कोडिंग सेट करना होगा।

+0

$ book_text = htmlentities ($ book_text, "ENT_QUOTES"); इसे यहां पोस्ट करने में एक त्रुटि थी। मेरी PHP फ़ाइल पर यह $ book_text = htmlentities ($ book_text, ENT_QUOTES) था; –

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