为什么Select2框架找不到一些unicode字符?

Why Select2 framework can not find some unicode character?

我在 mu 网站中使用 select2.js。我网站的语言是波斯语。我用此选项填充 select 元素

<select name="TrainDeparture" class="full-width select2" id="TrainDeparture">
    <option  value="165">كرج</option>   
</select>

js:

(function ($) {
    "use strict";

    $.fn.select2.locales['fa'] = {
        formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
        formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; },
        formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
        formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
        formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; },
        formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
        formatSearching: function () { return "در حال جستجو…"; }
    };

    $.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
})(jQuery);
$('.select2').select2();

当我在 select2 的搜索框中输入

ك

字符它显示消息没有找到结果但这是错误的。

I add arabic language to my keyboard and retest . In this case select2 found words currently . Now How can i fix this?

jsbin link

我遇到了类似的问题。我创建了一个自定义匹配器。

function customMatcher (params, data){
    // Always return the object if there is nothing to compare
    if ($.trim(params.term) === '') {
        return data;
    }

    if (data.children && data.children.length > 0) {
        // Clone the data object if there are children
        // This is required as we modify the object to remove any non-matches
        var match = $.extend(true, {}, data);

        // Check each child of the option
        for (var c = data.children.length - 1; c >= 0; c--) {
            var child = data.children[c];

            var matches = customMatcher(params, child);
            // console.log(matches);

            // If there wasn't a match, remove the object in the array
            if (matches == null) {
                match.children.splice(c, 1);
            }
        }

        // If any children matched, return the new object
        if (match.children.length > 0) {
            return match;
        }

        // If there were no matching children, check just the plain object
        return customMatcher(params, match);
    }

    var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
    var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();

    // Check if the text contains the term
    if (original.indexOf(term) > -1) {
        return data;
    }

    // If it doesn't contain the term, don't return anything
    return null;
}
$('select').select2({
    matcher: customMatcher
});

与原版的主要区别在于如何删除变音符号。

var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();

在波斯语和阿拉伯语中存在写相同的数字字符,但这些字符的代码不相同!如 :

ك是阿拉伯字符

ک 是波斯语字符

我把这个字符改成波斯语然后解决