2010-01-31 12 views
12

मैं निम्नलिखित slugify विधि PHP से सी # करने के लिए अनुवाद करने के लिए कोशिश कर रहा हूँ: http://snipplr.com/view/22741/slugify-a-string-in-php/Slugify और सी # में चरित्र लिप्यंतरण

संपादित करें:

: सुविधा के लिए, यहाँ ऊपर से कोड के लिए

$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 
:
/** 
* Modifies a string to remove al non ASCII characters and spaces. 
*/ 
static public function slugify($text) 
{ 
    // replace non letter or digits by - 
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text); 

    // trim 
    $text = trim($text, '-'); 

    // transliterate 
    if (function_exists('iconv')) 
    { 
     $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); 
    } 

    // lowercase 
    $text = strtolower($text); 

    // remove unwanted characters 
    $text = preg_replace('~[^-\w]+~', '', $text); 

    if (empty($text)) 
    { 
     return 'n-a'; 
    } 

    return $text; 
} 

मैं आराम नहीं कोडिंग probleming को छोड़कर मैं PHP कोड की निम्न पंक्ति के बराबर सी # नहीं मिल सकता है मिल गया

संपादित करें: इस का प्रयोजन गैर- ASCII वर्ण अनुवाद करने के लिए है इस तरह के Reformáció Genfi Emlékműve Előttreformacio-genfi-emlekmuve-elott में

+0

क्या आप तैयार समाधान पोस्ट करना चाहते हैं तो मैं देख सकता हूं? – chakrit

उत्तर

11

मैं भी जोड़ने के लिए है कि //TRANSLIT अक्षर लोप दूर करता है और कि @jxac समाधान को संबोधित नहीं करता चाहते हैं। मुझे यकीन नहीं है कि क्यों पहले इसे सिरिलिक में एन्कोडिंग करके और फिर ASCII तक आपको //TRANSLIT के समान व्यवहार मिलता है।

var str = "éåäöíØ"; 
var noApostrophes = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(str)); 

=> "eaaoiO" 
+0

इस समाधान के लिए बहुत बहुत धन्यवाद! मैं गैर-यूएस-एएससीआईआई अक्षरों को एक पुराने मेनफ्रेम सिस्टम के लिए एएससीआईआई समकक्ष के साथ बदलने का एक तरीका ढूंढ रहा हूं जो इन पात्रों को संभाल नहीं सकता है। – Annagram

+0

डरावना! लेकिन यह काम करता है। –

+0

यह सिर्फ उच्चारण हटा देता है और वास्तविक लिप्यंतरण नहीं करता है। यह प्रक्रिया में सभी गैर-उच्चारण अक्षरों को खो देगा। –

1

रूपांतरण स्ट्रिंग के रूप में:

byte[] ascii = Encoding.ASCII.GetBytes(str); 
:

byte[] unicodeBytes = Encoding.Unicode.GetBytes(str); 
byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); 
string asciiString = Encoding.ASCII.GetString(asciiBytes); 

रूपांतरण बाइट्स

@Thomas Levesque i सही, उत्पादन धारा के द्वारा इनकोडिंग जाएगा मिल ...

विशेषक (एक्सेंट चिन्ह), आप, String.Normalize समारोह का उपयोग कर सकते दूर करने के लिए के रूप में यहाँ विस्तृत:

http://www.siao2.com/2007/05/14/2629747.aspx

कि ऐसा करना चाहिए ज्यादातर मामलों का ख्याल रखना (जहां ग्लिफ वास्तव में एक चरित्र और एक उच्चारण चिह्न है)।

http://www.codeproject.com/KB/cs/UnicodeNormalization.aspx

इस में 1000 के आसपास प्रतीक मैपिंग में शामिल हैं: एक और भी अधिक आक्रामक चार मिलान के लिए (स्कैंडिनेवियाई slashed o [O], द्वि आलेख, और अन्य विदेशी ग्लिफ़ तरह के मामलों की देखभाल करने के लिए), वहाँ मेज पहुंच दी गई है सामान्यीकरण के अलावा।

(ध्यान दें, सभी विराम रेगुलर एक्सप्रेशन द्वारा हटा दिया जाता है अपने उदाहरण में प्रतिस्थापित करें)

8

कोडप्लेक्स पर लिप्यंतरण के लिए एक .NET लाइब्रेरी है - unidecode। यह आमतौर पर अजगर से पोर्ट किए गए यूनिडकोड टेबल का उपयोग करके चाल करता है।

+0

अब यह NuGet पर भी है: https://www.nuget.org/packages/UnidecodeSharpFork/ – skolima

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