2011-11-16 17 views
5

मैं Codeigniter उपयोग कर रहा हूँ इतने लंबे समय के लिए नहीं किए गए वर्णसेट लेकिन मैं कुछ चारसेट समस्याओं है .. मैं चारों ओर सीआई फोरम में पूछ रहा हूँ, लेकिन मैं आगे, अभी भी कोई वैश्विक समाधान जाना चाहता हूँ: http://codeigniter.com/forums/viewthread/204409/Codeigniter और

समस्या डेटाबेस त्रुटि 1064 थी। मुझे समाधान मिला है, iconv का उपयोग करें! ठीक काम करता है, लेकिन मुझे लगता है कि यह जरूरी नहीं है। मैं charset के आदि के लिए इंटरनेट पर बहुत कुछ खोज रहा हूं लेकिन मैं अब सीआई का उपयोग कर रहा हूं, कैसे charsets और सीआई के बारे में ...

तो मुझे इसके बारे में बहुत सारे सवाल हैं, मुझे उम्मीद है कि कोई इसे स्पष्ट कर सकता है मेरे लिए:

वर्णमाला वैश्विक सेट करने का सबसे अच्छा तरीका क्या है? और क्या सेट करना है?

  • सिर में

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

  • config में/config.php

    $config['charset'] = 'UTF-8';

  • config में/database.php

    $db['default']['char_set'] = 'utf8';

    $db['default']['dbcollat'] = 'utf8_general_ci';

  • .htaccess में, मेरा पुनर्लेखन नियमों और

    php_value magic_quotes_gpc Off

    AddDefaultCharset UTF-8

  • इसके अलावा एक हैडर भेजने की ज़रूरत है? कहां रखना है? कुछ इस तरह?

    header('Content-Type: text/html; charset=UTF-8');

  • अपने संपादक (Notepad ++) UTF-8 के रूप में फाइल को बचाने में? या यूटीएफ -8 (बीओएम के बिना)? या एएनएसआई अच्छा है (यही वह है जो मैं अब उपयोग कर रहा हूं)?

  • MySQL डेटाबेस के लिए utf8_unicode_ci या utf8_general_ci का उपयोग करें? और क्यों?

  • आरएसएस फ़ीड पढ़ने के बारे में, एकाधिक वर्णमाला को कैसे संभालें? जहां मैं काम कर रहा हूं, मेरे पास दो फीड हैं, एक यूटीएफ -8 एन्कोडिंग वाला और दूसरा आईएसओ -885 9 -1 के साथ। यह डेटाबेस में संग्रहीत किया जाएगा और कभी-कभी यह देखने के लिए तुलना की जाएगी कि क्या नए आइटम हैं या नहीं। यह विशेष वर्णों में विफल रहता है।

मैं के साथ काम कर रहा हूँ: - सीआई 2.0.3 - पीएचपी 5.2.17 - MySQL 5.1।58

अधिक जानकारी कहा:

मॉडल:

function update_favorite($data) 
{ 
$this->db->where('id', $data['id']); 
$this->db->where('user_id', $data['user_id']); 
$this->db->update('favorites', $data); 
return; 
} 

नियंत्रक:

$this->favorites_model->update_favorite(array(
'id' => $id, 
'rss_last' => $rss_last, 
'user_id' => $this->session->userdata('user_id') 
)); 

जब $ rss_last की तरह एक "सामान्य" मूल्य है: उद्धरण चिह्नों के बिना "परीक्षण" () यह बढ़िया काम करता है। जब यह (डच में) की तरह अधिक लंबाई के साथ एक मूल्य है: certificaat वैन Maleisische

overheid F-Secure vindt मैलवेयर से मुलाकात की मैं इस त्रुटि मिलती है:

सीआई मंच पर

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘vindt malware met certificaat van Maleisische overheid, user_id = ‘1’ WHERE `i’ at line 1

UPDATE favorites SET id = ‘15’, rss_last = F-Secure vindt malware met certificaat van Maleisische overheid, user_id = ‘1’ WHERE id = ‘15’ AND user_id = ‘1’

Filename: /home/.../domains/....nl/public_html/new/models/favorites_model.php

Line Number: 35

का कोई व्यक्ति इस का उपयोग करने के मुझे बताया :

'rss_last' => iconv("UTF-8", "UTF-8//TRANSLIT", $rss_last) 

यह ठीक काम करता है, लेकिन मुझे लगता है कि यह आवश्यक नहीं है ..

मूल्य $ rss_last बाहर एक आरएसएस फ़ीड, आया के रूप में bef बताया अयस्क, कभी कभी एक UTF-8 और दूसरी बार एक ISO-8859-1 एन्कोडिंग:

$rss = file_get_contents('http://www.website.com/rss.xml'); 
$feed = new SimpleXmlElement($rss); 
$rss_last = $feed->channel->item[0]->title; 

ऐसा लगता है कि इस अंतिम भाग की तरह समस्या है, जब $ rss_last मान पर सेट है यह ठीक काम करता है:

$rss_last = 'F-Secure vindt malware met certificaat van Maleisische overheid'; 

जब मूल्य आरएसएस यह समस्या देना ...

कुछ और सवालों के बाहर आ गया ..

बस इस पाया: Detect encoding and make everything UTF-8

श्रेष्ठ समाधान?

$encoding = some_function_to_get_encoding_from_feed($feed); 
$rss_last = iconv($encoding, "UTF-8//TRANSLIT", $feed->channel->item[0]->title); 

लेकिन क्या "some_function_to_get_encoding_from_feed" के लिए उपयोग करने के लिए: लेकिन .. अधिक सरल नहीं, तो इस तरह कुछ करना है iconv? mb_detect_encoding?

और mb_convert_encoding बनाम iconv?

+0

आपके जोड़े गए: आपके SQL अपडेट फ़ंक्शन में सभी _rss_last_ को छोड़कर उद्धरणों में एक पैरामेट करते हैं। हां, मुझे पता है कि यह सीआई द्वारा उत्पन्न होता है, लेकिन यह संदिग्ध है। –

+0

_This ठीक काम करता है, लेकिन मुझे लगता है कि यह आवश्यक नहीं है .._ आपका अधिकार। –

उत्तर

4

1) कोई वैश्विक समाधान नहीं है।

2)

AddDefaultCharset UTF-8 

यह सही एन्कोडिंग के साथ ग्राहक के लिए अपाचे प्रतिक्रिया के लिए आवश्यक है। इसे बनाओ।

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

आवश्यक नहीं है, लेकिन डब्ल्यू 3 सी द्वारा अनुशंसित।

$config['charset'] = 'UTF-8'; 

यह डेटाबेस के लिए सीआई कनेक्शन के लिए वांछनीय

$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 

एन्कोडिंग है। यदि आपके डेटाबेस का एन्कोडिंग यूटीएफ -8 है - इसे अनिवार्य बनाएं।

header('Content-Type: text/html; charset=UTF-8'); 

आवश्यक होने तक ऐसा न करें। वर्णसेट पहले से ही HTML कोड और .htaccess में इंगित किया गया है।

Use utf8_unicode_ci or utf8_general_ci for the MySQL database? And why? 

अपनी भाषा (रूसी) के लिए, मैं utf8_general_ci का उपयोग करता हूं।

In my editor (Notepad++) save files as UTF-8? 

बिल्कुल! यूटीएफ 8 के रूप में अपाचे को जो कोड दिया जाएगा वह यूटीएफ 8 में होना चाहिए।

How about reading RSS feeds, how to handle multiple charsets? 

आप प्रत्येक तालिका में प्रत्येक आरएसएस है - आप प्रत्येक तालिका के लिए अक्षरसेट निर्दिष्ट और प्रत्येक एसक्यूएल क्वेरी के साथ सही एन्कोडिंग सेट कर सकते हैं। हां, उदाहरण के लिए, सिरिलिक प्रतीकों, गैर-यूटीएफ 8 पर विफल हो जाएंगे।

+0

मैं जोड़ता हूं कि यह अनिवार्य है: .htaccess में एन्कोडिंग और HTML के लिए यूटीएफ -8 के रूप में सहेजी गई सभी HTML-फ़ाइलें और $ db ['default'] ['dbcollat'] = 'utf8_general_ci'; MYSQL के लिए। –

+0

उत्तर के लिए धन्यवाद! बस मेरी शुरुआत पोस्ट में आरएसएस फ़ीड पढ़ने के बारे में कुछ और जानकारी जोड़ा। – Roy

1

यूटीएफ -8 (बीओएम के बिना) आपको अपनी कॉन्फ़िगरेशन के आधार पर सर्वोत्तम परिणाम देना चाहिए और अलग-अलग शीर्षलेख भेजने की आवश्यकता नहीं है क्योंकि एन्कोडिंग पहले से ही मुख्य भाग में चुनी गई है। Utf8_general_ci को MySQL डेटाबेस के लिए ठीक करना चाहिए। शायद डेटाबेस में प्रविष्टियां मान्य नहीं हैं?

+0

चेक किया गया और बदला गया लेकिन यह कोई भिन्नता नहीं बनाता है। अभी भी एक क्वेरी में उपयोग करने से पहले iconv 'iconv (" UTF-8 "," UTF-8 // TRANSLIT ", $ value) डालने की आवश्यकता है, मुझे 1064 डेटाबेस त्रुटि मिलती है ... डेटाबेस में प्रविष्टियां मान्य नहीं हैं ? सब कुछ collation utf8_general_ci .. – Roy

+0

1) क्या आप मुझे पूर्ण डेटाबेस त्रुटि दे सकते हैं? 2) मेरा मतलब था कि प्रविष्टियां यूटीएफ -8 नहीं थीं जब उन्हें डाला गया था। 3) शायद आपको PHP को 5.3.x पर अपडेट करना चाहिए - एक हफ्ते पहले एक दोस्त को सीआई 2 और PHP के पुराने संस्करण का उपयोग करते हुए डीबी के साथ कुछ (थोड़ा अलग) समस्याएं थीं। कुछ भी उसने कोशिश नहीं की ... फिर उसने PHP अपडेट किया और सब कुछ ठीक था ... अजीब बग। लेकिन यह आपका अंतिम उपाय होना चाहिए। – Shomz

+0

बस अधिक जानकारी जोड़ा और मैं अपने होस्टिंग प्रदाता को अपग्रेड करने के लिए कहूंगा। – Roy