2012-08-05 8 views
24

मैं JavaScript में जिस तरह से देख रहा हूँ एक स्ट्रिंग में गैर ASCII वर्ण परिवर्तित करने के लिए उनके निकटतम बराबर करने के लिए, इसी तरह करने के लिए क्या PHPiconv फ़ंक्शन करता है। उदाहरण के लिए यदि इनपुट स्ट्रिंग Rånades på Skyttis i Ö-vik है, तो इसे Ranades pa skyttis i o-vik में परिवर्तित किया जाना चाहिए। मैंने phpjs पर एक नज़र डाली थी लेकिन iconv शामिल नहीं है।उनके निकटतम ASCII समकक्ष (स्लग निर्माण) में कनवर्ट गैर- ASCII वर्ण (उमलॉट लहजे ...)

क्या जावास्क्रिप्ट में ऐसा रूपांतरण करना संभव है, यदि ऐसा है तो कैसे?

+0

संबंधित (लेकिन कोई वास्तविक कंबल समाधान): [उमलॉट हटाने या जावास्क्रिप्ट स्ट्रिंग में स्पेशलचार्स] (http://stackoverflow.com/q/4804885) –

+0

यह * विशाल प्रतिस्थापन तालिकाओं को बनाए रखे बिना जावास्क्रिप्ट में संभवतः संभव नहीं हो सकता है (कम से कम, मैंने इसे करने के लिए कोई तरीका कभी नहीं देखा है)। किसी सर्वर को डेटा भेजने और आइकन आइकन का उपयोग करने का कोई तरीका नहीं है? –

+1

मैंने एक बार ऐसा करने के लिए एक फ़ंक्शन बनाया है। Http://userscripts.org/scripts/review/112070, Ctrl + F "' var RW759_normalize_accents' "देखें। इसका उपयोग खोजों के लिए अक्षरों को सामान्य करने के लिए किया जाता है, मैंने मैन्युअल रूप से विशिष्ट उद्देश्य के लिए बनाए गए टूल के साथ अक्षर iirc का चयन किया। [इस क्यू एंड ए] के आधार पर (http://stackoverflow.com/questions/227950/programatic-accent-reduction-in-javascript-aka-text-normalization-or-unaccentin) –

उत्तर

15

सबसे आसान तरीका मैंने पाया:

var str = "Rånades på Skyttis i Ö-vik"; 
var combining = /[\u0300-\u036F]/g; 

console.log(str.normalize('NFKD').replace(combining, '')); 
+2

[ईसीएमएस्क्रिप्ट 6] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)। आज तक, यह केवल नवीनतम क्रोम और फ़ायरफ़ॉक्स पर जोर दिया गया है। हालांकि, वादा करना। –

+0

मैंने इस विधि का उपयोग नोडजेएस में किया था। हो सकता है कि क्लाइंट के लिए कुछ यूनिकोड सामान्यीकरण मॉड्यूल हो, जैसे [अनमोल] (https://github.com/walling/unorm) – Rez

+0

नोड.जेएस में आइकनव पोर्ट्स हैं। –

3

ऐसा इसलिए है क्योंकि iconv सबसे मूल I18n वर्ण मानचित्र रूपांतरण कार्यों के पीछे एक मूल संकलित यूनिक्स उपयोगिता है।

आपको इसे javascript में नहीं मिलेगा जबतक कि आप कुछ ब्राउज़र घटक तक नहीं पहुंच जाते।

एन्कोडिंग दस्तावेज़ की एक संपत्ति है इसलिए अधिकांश जावास्क्रिप्ट कार्यान्वयन बस इसे खारिज कर देता है।

आपको असंतुलित तारों के लिए एक शुद्ध जेएस लाइब्रेरी की आवश्यकता होगी। आपको आवश्यक विशिष्ट भाषा के लिए एक होना सबसे अच्छा होगा।

कुछ अनुवाद सारणी या यहां तक ​​कि regex प्रतिस्थापन के माध्यम से सबसे आसान तरीका है।

यहाँ की तरह: http://lehelk.com/2011/05/06/script-to-remove-diacritics/

जाँच इस सूत्र भी: Replacing diacritics in Javascript

+1

मुझे अभी एहसास हुआ है कि एक 'ASCII' चरित्र के साथ डाइक्रिटिक्स को प्रतिस्थापित करना आदर्श नहीं है। उदाहरण के लिए जर्मन में, 'ü' को' ue' में परिवर्तित किया जाना चाहिए और न केवल 'यू', http: //webmasters.stackexchange देखें।com/प्रश्न/33032/कैसे करने वाली संभाल-यूआरएल-साथ विशेषक-अक्षर। ऐसा लगता है कि यहां तक ​​कि 'iconv' आईआर नहीं कर रहा है (' php -r 'setLocale (LC_ALL, "de_DE"); echo iconv ("UTF-8", "ASCII // TRANSLIT", "ü"); // // -> यू) ', इसलिए मुझे लगता है कि मैं खुद को अनुवाद तालिका बनाने जा रहा हूं ('iconv' के आधार पर और मैन्युअल रूप से tweaked) और उन' जावाक्रिप्ट 'और' PHP' दोनों के लिए उपयोग करें। – Max

+0

इस के अनुसार [iconv उपयोगकर्ता टिप्पणी] (http://nl3.php.net/manual/en/function.iconv.php#105507) तो लोकल जर्मन पर सेट होने पर 'ü' से 'ue' परिवर्तित हो जाएगा । – icc97

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