我正在用土耳其语搜索php。在土耳其语字母中,有“ i”和“ı”小写字符。还要有“ I”和“İ”大写字符。
在正则表达式函数中找不到MySQL选择查询土耳其语字符,例如:İ-ı..我的搜索列数据类型字符集UTF-8 general_ci。
我正在等待您的答复。提前致谢。
答案 0 :(得分:2)
您可以通过以下方式解决土耳其字符问题。
使用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>
将此结果通过ajax发布发送到您的php文件中。
稍后,您的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
祝你好运
答案 1 :(得分:0)
使用COLLATION utf8_turkish_ci
(或utf8mb4),只有这样,MySQL才会对待
I=ı < İ=i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į
对于土耳其语,其余重音字母也可以正确处理。也就是说,对于WHERE
和ORDER BY
,几乎不需要使用正则表达式来正确比较单词。
(不需要任何PHP代码。)
更多详细信息:http://mysql.rjweb.org/utf8_collations.html
该参考文献还指出Ş
和ş
就像s
和t
之间的字母。等等
如果您的目标是使用ı
和İ
定位行,请详细说明。这可能涉及HEX()
或utf8_bin
。