我需要保存一个用户输入到数据库的列 utf8_general_ci
每个码位最多需要三个字节的编码。但如果用户输入包含使用四个字节的字符(例如emojis),则输入不会保存到列中。我需要的是检查输入只包含最多使用三个字节的字符。我知道我可以把列编码改成 utf8mb4
但我不想这么做。
那么我该怎么做呢:
if (maxThreeBytes("?")) { //return fail
echo "success";
}
else {
echo "fail";
}
另一个例子:
maxThreeBytes("a") => true
maxThreeBytes("ščřžý") => true
maxThreeBytes("test this") => true
maxThreeBytes("??") => false
maxThreeBytes("hello ?") => false
maxThreeBytes("test this") => true
maxThreeBytes("test ? this") => false
2条答案
按热度按时间kqhtkvqz1#
假设
$str
utf-8编码:它检查字符串是否包含四个匹配的字符
11110b 10b 10b 10b
它是u+10000和u+10ffff之间字符的编码。c9qzyr3d2#
对于utf-8转换:
只为正则表达式
这不是一个完整的答案,只是一个例子,等待更多的评论你可能需要更多的符号在正则表达式,添加你需要的,发挥:<