Как переопределить турецкие буквы в скрипте тега autolink - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть следующий код:

Для пользователя

@john -> <a href="homeurl/profile/john">@john</a>

Для хэштега

#hello -> <a href="homeurl/hashtag/hello">#hello</a>

Но в хэштегах PHP есть турецкие буквы (в заголовке). Таким образом, слизняк хэстэгов очищен от (название). И турецкие буквы заменяют основные латинские буквы.

Турецкие письма: ığüşöç İĞÜŞÖÇ

(function($) {
  $.fn.autolink_regex_map = new Array(
    {
      're': /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, // URLs
      'replace': '<a rel="nofollow" href="$1">$1</a>'
    },
    {
      're': /(([a-z0-9*._+]){1,}\@(([a-z0-9]+[-]?){1,}[a-z0-9]+\.){1,}([a-z]{2,4}|museum)(?![\w\s?&.\/;#~%"=-]*>))/g, // Email addresses
      'replace': '<a rel="nofollow" href="mailto:$1">$1</a>'
    },
    {
      're': /(^|\s)@(\w+)/g, // @-mentions
      'replace': '$1<a rel="author" href="' + homeurl + '/profile/$2">@$2</a>'
    },
    {
      're': /(^|\s)#(\w+)/g, // Hashtags
      'replace': '$1<a rel="search" href="' + homeurl + '/hashtag/$2">#$2</a>'
    }
  );

  $.fn.autolink = function() {
    return this.each(function() {
      var $this = $(this);

      $.each($.fn.autolink_regex_map, function(i, obj) {
        $this.html($this.html().replace(obj.re, obj.replace));
      });
    });
  }
})(jQuery);

Это изображение получено в следующем коде:

#değilmi -> <a href="homeurl/hashtag/de">#de</a>ğilmi

Как определить турецкие буквы и как заменить латинскую версию для URL, например

<a href="homeurl/hashtag/degilmi">#değilmi</a>

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Для пули я использую этот скрипт:

var string_to_slug = function (str)
{
    str = str.replace(/^\s+|\s+$/g, ''); // trim
    str = str.toLowerCase();

    // remove accents, swap ñ for n, etc
    var from = "àáäâèéëêìíïîıòóöôùúüûñçşğ·/_,:;";
    var to   = "aaaaeeeeiiiiioooouuuuncsg------";

    for (var i=0, l=from.length ; i<l ; i++)
    {
        str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
    }

    str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
        .replace(/\s+/g, '-') // collapse whitespace and replace by -
        .replace(/-+/g, '-'); // collapse dashes

    return str;
}

Может, кому-то и нужно.

0 голосов
/ 29 апреля 2018

Вы можете следовать по стопам Эффективно заменить все акцентированные символы в строке? и перевести турецкие символы в буквы ASCII следующим образом:

var makeSortString = (function() {
  var translate_re = /[ığüşöçİĞÜŞÖÇ]/g;
  var translate = {
    "ı": "i", "ğ": "g", "ü": "u", "ş": "s", "ö": "o", "ç": "c",
    "İ": "I", "Ğ": "G", "Ü": "U", "Ş": "S", "Ö": "o", "Ç": "C",
  };
  return function(s) {
    return ( s.replace(translate_re, function(match) { 
      return translate[match]; 
    }) );
  }
})();

Однако, если вы можете использовать ECMAScript 6, он вводит метод String.prototype.normalize(), который позаботится о нормализации Unicode для вас. Вы можете использовать его с unorm polyfill для обычного JS.

console.log('ığüşöçİĞÜŞÖÇ'.normalize('NFKD'));
...