c# - C# 中的 Slugify 和字符音译

标签 c# internationalization slug transliteration

我正在尝试将以下 slugify 方法从 PHP 转换为 C#: http://snipplr.com/view/22741/slugify-a-string-in-php/

编辑:为了方便起见,将上面的代码放在这里:

/**
 * 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;
}

除了找不到与以下 PHP 代码行等效的 C# 代码外,我对其余代码没有问题:

$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

编辑: 这样做的目的是将非 ASCII 字符(例如 Reformáció Genfi Emlékműve Előtt)翻译成 reformacio-genfi-emlekmuve-elott

最佳答案

我还想补充一点,//TRANSLIT 删除了撇号,@jxac 解决方案没有解决这个问题。我不确定为什么,但首先将其编码为西里尔文,然后再编码为 ASCII,您会得到与 //TRANSLIT 类似的行为。

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

=> "eaaoiO"

关于c# - C# 中的 Slugify 和字符音译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173825/

相关文章:

programming-languages - 真正的多语言编程语言?

php - wordpress 如何取消标题

c# - 不明确的通用限制 T :class vs T:struct

c# - 无法将 COM 对象转换为类类型

cakephp - 如何使用新生成的 .pot 文件更新现有的 .po 文件?

javascript - 带有功能组件的动态 HTML lang 属性 Next@9.4

utf-8 - Symfony2、Doctrine2 : non english/letin slug

php - 如何从单词列表中生成随机 slug

c# - 进度条的 Visibility 属性在运行时不会改变

c# - IIS session 在发布 Web 上丢失