使用此代码,当我将漢字
填入类型为text
且名称为text
的输入元素并按下提交按钮时,其显示mb_strlen : 16
和{{1} }
strlen : 16
但是当使用此代码时,它会显示<?php
include("connect.php");
if(isset($_POST["submit"]))
{
$string = mysqli_real_escape_string($db_mysqli,$_POST['text']);
//$string = "漢字";
echo $string."<BR>";
echo "mb_strlen : ".mb_strlen($string, 'utf-8')."<BR>";
echo "strlen : ".strlen($string)."<BR>";
if(strlen($string) != mb_strlen($string, 'utf-8'))
{
echo "Please enter English words only:(";
}
else
{
echo "OK, English Detected!";
}
}
?>
<form method="post" ENCTYPE = "multipart/form-data">
<input type="text" name="text">
<input type="submit" name="submit" value="OK" id="button-blue" style=" float: none; ">
</form>
和mb_strlen : 2
我想知道,为什么上面代码的值不正确以及如何申请?
strlen : 6
答案 0 :(得分:0)
这个答案可能会有一些问题 - 需要稍后修订 - 但是我们可以使用Regex来检查输入字符串是否包含非拉丁字符。
而不是使用strlen
。
代码:
$string = '漢字';
$matches = array();
$pattern = '/^[^\p{Latin}]+$/u';
preg_match($pattern, $string, $matches);
print_r($matches);
结果:
Array
(
[0] => 漢字
)
如果我使用This is a Latin string jasDLFKL@##$&()@!!!
进行测试,我会得到一个空数组。我不相信这是一个万无一失的解决方案,但更好的第一步。
请注意,Regex的拉丁字符范围的定义是U + 0000-U + 007F。这个Regex Tutorial Page详细介绍了Unicode。另请注意,我的模式有一个u
标志,用于Unicode。这将是必要的。