C#中的Slugify和字符音译我正在尝试将以下slugify方法从PHP转换为C#:http://snipplr.com/view/22741/slugify-a-string-in-php/编辑:为方便起见,这里是上面的代码:/***修改字符串以删除所有非ASCII字符和空格。*/staticpublicfunctionslugify($text){//将非字母或数字替换为-$text=preg_replace('~[^\pLd]+~u','-',$text);//修剪$text=trim($text,'-');//音译if(function_exists('iconv')){$text=iconv('utf-8','us-ascii//TRANSLIT',$text);}//小写$text=strtolower($text);//去除不需要的字符$text=preg_replace('~[^-w]+~','',$text);如果(empty($text)){返回'n-a';}返回$文本;除了我找不到与以下PHP代码行等效的C#之外,我没有遇到任何其他问题。$text=iconv('utf-8','us-ascii//TRANSLIT',$text);编辑:目的是将非ASCII字符(如ReformációGenfiEmlékm?veEl?tt)转换为reformacio-genfi-emlekmuve-elott我还想补充一点,//TRANSLIT删除撇号,@jxac解决方案无法修复。我不确定为什么,但首先将其编码为西里尔文,然后再编码为ASCII,您将获得与//TRANSLIT类似的行为。varstr="é???í?";varnoApostrophes=Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(str));=>"eaaoiO"在codeplex上有一个用于音译的.NET库–unidecode。它通常使用从python移植的Unidecode表来实现。转换为字符串:byte[]unicodeBytes=Encoding.Unicode.GetBytes(str);byte[]asciiBytes=Encoding.Convert(Encoding.Unicode,Encoding.ASCII,unicodeBytes);字符串asciiString=Encoding.ASCII.GetString(asciiBytes);转换为字节:byte[]ascii=Encoding.ASCII.GetBytes(str);@ThomasLevesque是对的,将由输出流编码...要删除变音符号(重音符号),您可以使用String.Normalize函数,如下所示:http://www.siao2.com/2007/05/14/2629747.aspx这应该可以处理大多数情况(字形实际上是一个字符加上一个重音符号)。对于更积极的字符匹配(用于处理像o[?]的斯堪的纳维亚切割、二合字母和其他形状的字形的情况),有表格方法:http://www.codeproject.com/KB/cs/UnicodeNormalization.aspx这除了规范化之外,还包括大约1,000个符号映射。(注意在你的例子中,regexsubstitution去掉了所有的标点符号)以上都是C#学习教程:SlugifyandCharacterTransliterationinC#分享的,如果对大家有用需要进一步了解C#学习教程,希望大家多多指教以后会多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
