MySQL функция регулярных выражений проблема турецкого символа - PullRequest
3 голосов
/ 11 марта 2019

Я ищу с php по-турецки.В турецком алфавите есть строчные буквы «я» и «я».Также есть заглавные буквы 'I' и 'İ'.

Mysql-запрос выбора в функции регулярного выражения не может быть найден турецким символом, например: İ - ı .. Мой набор символов типа данных столбца поиска UTF-8 general_ci.

Жду ваших ответов.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Вы можете решить проблему турецкого символа следующими способами.

Используйте код HTML и JQuery, как показано ниже;

function searchBarReplaceChar() {
        searchInput = $.trim($('input[name="replaceChar"]').val());

        let charMap = {
            Ç: '[CÇ]+',
            C: '[CÇ]+',
            Ö: '[OÖ]+',
            O: '[OÖ]+',
            Ş: '[SŞ]+',
            S: '[SŞ]+',
            İ: '[Iİ]+',
            I: '[Iİ]+',
            Ü: '[UÜ]+',
            U: '[UÜ]+',
            Ğ: '[GĞ]+',
            G: '[GĞ]+',
            ç: '[cç]+',
            c: '[cç]+',
            ö: '[oö]+',
            o: '[oö]+',
            ş: '[sş]+',
            s: '[sş]+',
            ı: '[ıi]+',
            i: '[ıi]+',
            ü: '[uü]+',
            u: '[uü]+',
            ğ: '[gğ]+',
            g: '[gğ]+',
        };

        let str_array = searchInput.split('');

        for (let i = 0, len = str_array.length; i < len; i++) {
            str_array[i] = charMap[str_array[i]] || str_array[i];
        }

        searchInput = str_array.join('');

        let replaceChar = searchInput.replace(/[]/gi, "");
        let lastChar = replaceChar.slice(-1);
        if (lastChar === '+') {
            replaceChar = replaceChar.slice(0, -1);
        }
        $('.result').text(replaceChar);
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" name="replaceChar" value="şehir bu gece çok güzel" />
<p class="result"></p>
<button type="submit" onclick="searchBarReplaceChar()" >Send</button>

отправьте этот результат в ваш php файл с сообщением ajax.

позже, код вашего php файла,

public function search_regexp() {
    $regexp = str_replace('i', 'İ', $_POST['get_replace_result']);
    $regexp = str_replace('ı', 'I', $regexp);
    $regexp = mb_strtoupper($regexp, "UTF-8");
    $sql_query = "SELECT * FROM your_table WHERE example_column regexp '$regexp'";
    // $sql_query = "SELECT * FROM your_table WHERE example_column regexp '[SŞ]+EH[Iİ]+R B[UÜ]+ [GĞ]+E[CÇ]+E [CÇ]+[OÖ]+K [GĞ]+[UÜ]+ZEL'";
}

не забывайте об этом, база данных mysql в вашем наборе символов типа данных столбца таблицы utf8_turkish_ci

Удачи с

0 голосов
/ 14 марта 2019

С COLLATION utf8_turkish_ci (или utf8mb4) и только с этим MySQL обрабатывает

I=ı  <  İ=i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į

Остальные акцентированные буквы также корректно обрабатываются для турецкого языка.То есть для WHERE и ORDER BY редко требуется использовать регулярные выражения для правильного сравнения слов.

(нет необходимости в каком-либо коде PHP.)

Подробнее:http://mysql.rjweb.org/utf8_collations.html

Эта ссылка также указывает на то, что Ş и ş подобны букве между s и t.И т.д.

Если ваша цель состоит в том, чтобы найти рядов с ı и İ, пожалуйста, уточните.Это может включать HEX() или utf8_bin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...