代码之家  ›  专栏  ›  技术社区  ›  Marcel Jackwerth

如何在javascript中参数化/音译?

  •  3
  • Marcel Jackwerth  · 技术社区  · 15 年前

    在RubyonRails中,您可以轻松地将“任意”文本转换为适用于子域/路径名的格式。

    1) "I am nobody." -> "i-am-nobody"
    2) "Grünkohl is a german word." -> "grunkohl-is-a-german-word"
    

    我想在客户端实现这一点,以获得高响应性(另一种选择是通过Ajax)。

    最后一个例子叫做音译(将元音字母和其他非拉丁字母转换为拉丁字母)。音译是一个不错的特性(在这种情况下,我可以回退到Ajax,让iconv来做)。

    有人知道如何使用JavaScript吗?我当前的代码工作正常,但有多个空格的问题,以及 Tête-à-tête 变成 Tte--tte 真是难看。

    3 回复  |  直到 10 年前
        1
  •  9
  •   RJHunter    13 年前

    当我需要这个的时候,我使用了这个wich的django javascript实现,它涵盖了大部分的内容,甚至更多:)

    可以在这里找到: https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/static/admin/js/urlify.js

        2
  •  0
  •   fyalavuz    11 年前
        3
  •  0
  •   Zon    10 年前

    这里有一个JS将传递的短语俄语翻译成英语,以满足URL需求。您可以修改其数据以应用于法语或任何其他语言。除字母和数字外,所有字母和数字均以“—”、双精度和结尾“—”替换。

    function url(word, letterVersionOrder) {
            var letters = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' ');
            var wordSeparator = '';
            word = word.toLowerCase();
            for (var i = 0; i < word.length; ++i) {
                var charCode = word.charCodeAt(i);
                var chars = (charCode >= 1072 ? letters[charCode - 1072] : word[i]);
                if (chars.length < 3) {
                    wordSeparator += chars;
                } else {
                    wordSeparator += eval(chars)[letterVersionOrder];
                }
            }
            return(wordSeparator.
                    replace(/[^a-zA-Z0-9\-]/g, '-').
                    replace(/[-]{2,}/gim, '-').
                    replace(/^\-+/g, '').
                    replace(/\-+$/g, ''));
        }
    

    这里有一个更快的缩小版本:

    function url(w, v) { var tr = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' '); var ww = ''; w = w.toLowerCase(); for (var i = 0; i < w.length; ++i) { var cc = w.charCodeAt(i); var ch = (cc >= 1072 ? tr[cc - 1072] : w[i]); if (ch.length < 3) {ww += ch;} else {ww += eval(ch)[v];} } return(ww.replace(/[^a-zA-Z0-9\-]/g, '-').replace(/[-]{2,}/gim, '-').replace(/^\-+/g, '').replace(/\-+$/g, ''));}
    

    采用于 here .