我需要使用utf8_general_ci
编码将用户输入保存到数据库到列,每个编码点最多需要三个字节。但是,如果用户输入包含使用四个字节的字符(例如,表情符号),则输入不会保存到列中。我需要检查输入内容是否仅包含最多使用三个字节的字符。我知道我可以将列编码更改为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
答案 0 :(得分:1)
假设$str
是UTF-8编码的:
function maxThreeBytes($str) {
return preg_match('@[\\xf0-\\xff][\\x80-\\xff][\\x80-\\xff][\\x80-\\xff]@', $str) ? false : true;
}
它检查字符串是否包含与11110xxxb 10xxxxxxb 10xxxxxxb 10xxxxxxb
匹配的四个字符,import torch
myTensor = torch.randn(2, 2,requires_grad=True)
with torch.enable_grad():
x=myTensor.sum() *10
x.backward()
print(myTensor.grad)
是介于U + 10000和U + 10FFFF之间的字符的编码。
答案 1 :(得分:0)
对于utf-8转换:
$input = iconv('UTF-8', 'UTF-8//IGNORE', trim(strip_tags($input)));
仅用于正则表达式
$input = preg_replace("/[^A-Za-z0-9:[:blank:]]()\+\-/","",$input);
它不是一个完整的答案,只是一个例子,等待更多评论 您可能需要在正则表达式中添加更多符号,添加所需的符号,然后试一下:<< / p>