मेरे पास एक MySQL तालिका है जिसमें यूटीएफ -8 प्रारूप में संग्रहीत 120,000 लाइनें हैं। एक फ़ील्ड, उत्पाद का नाम है, जिसमें कई उच्चारण वाले टेक्स्ट हैं। मुझे इसे यूआरएल-फ्रेंडली फॉर्म (एएससीआईआई) में परिवर्तित करने के बाद इस नाम के साथ एक दूसरा फ़ील्ड भरना होगा।iconv स्मार्ट उद्धरण के साथ "अवैध चरित्र" देता है - उनसे कैसे छुटकारा पाएं?
के बाद से पीएचपी सीधे UTF-8 नहीं क्या करता है, मैं उपयोग कर रहा हूँ:
$value = iconv ('UTF-8', 'ISO-8859-1', $value);
ISO-8859-1 करने के लिए नाम, एक बड़े पैमाने पर strstr बयान के बाद परिवर्तित करने के लिए द्वारा किसी भी उच्चारण चिह्न चरित्र को बदलने के लिए इसके असीमित समकक्ष (उदाहरण के लिए, एक बन जाता है)।
हालांकि, मूल पाठ नामों स्मार्ट उद्धरणों के साथ दर्ज किए गए थे, और iconv chokes जब भी यह एक भर आता है - मैं:
Unknown error type: [8] iconv() [function.iconv]: Detected an illegal character in input string
iconv उपयोग करने से पहले स्मार्ट उद्धरणों से छुटकारा पाने के लिए, मैं कोशिश की है की तरह तीन बयानों का उपयोग कर:
$value = str_replace('’', "'", $value);
(â € ™ एक UTF-8 स्मार्ट एकल उद्धरण के कच्चे मान है) क्योंकि पाठ फ़ाइल इतने लंबे समय है, इन str_replace के कारण वें ई स्क्रिप्ट हर समय बाहर करने के लिए।
एक UTF-8 स्ट्रिंग से स्मार्ट उद्धरणों (या किसी भी अमान्य वर्ण), iconv चलाने से पहले निकाल देते सबसे तेज़ तरीका क्या है?
या, क्या इस पूरी समस्या का कोई आसान समाधान है? एएससीआईआई में यूटीएफ -8 में, कई उच्चारणों के साथ नाम बदलने के लिए सबसे तेज़ तरीका क्या है, बिना किसी उच्चारण वाले नाम पर, सही वर्तनी है?
क्या आपने iconv() की // ट्रान्सलिट क्षमता की कोशिश की है? यह उच्चारण अक्षरों को उनके पठनीय ASCII समकक्षों में परिवर्तित करना चाहिए। – ceejayoz
मैं प्रलेखन को देख रहा हूं, लेकिन मुझे नहीं लगता कि यह कैसे मदद करेगा - अगर iconv() पहले से ही एक स्मार्ट कोट पर चोक करता है, तो क्या मैं अभी भी चोक नहीं करता अगर मैं // TRANSLIT का उपयोग करता हूं? –
यह आपके "बड़े पैमाने पर स्ट्रस्ट्र स्टेटमेंट" के लिए अधिक है - यही कारण है कि मैंने एक उत्तर के बजाय टिप्पणी की। – ceejayoz