php 检查txt中全角大写字母的个数
程序员文章站
2022-03-31 19:16:39
...
<?php
function IsChinese($inChar)
{
//中文从GBK里的16区(0x10 + 0xA0 = 0xB0)开始
if ($inChar > chr(0xB0))
{
return true;
}
return false;
}
//判断字符是不是ASCII码
function IsAscii($inChar)
{
if ($inChar < chr(0x80))
{
return true;
}
return false;
}
//判断字符是不是全角大写英文字母
function IsSbcCapital($inString, $indexOfString, $lenOfString)
{
//消除理论上不会触发的内存泄漏隐患
if ($indexOfString + 1 >= $lenOfString)
{
return false;
}
//全角大写字母从GBK里3区(0x03 + 0xA0 = 0xA3)33位(0x21 + 0xA0 = 0xC1)
if ($inString[$indexOfString] == chr(0xA3)
&& $inString[$indexOfString + 1] > chr(0xC0)
&& $inString[$indexOfString + 1] < chr(0xDB))
{
return true;
}
return false;
}
function numberSbc($gbkStr)
{
$length = strlen($gbkStr);
$sum = 0;
for($index = 0; $index < $length; )
{
if (IsChinese($gbkStr[$index]))
{
$index = $index + 2;
}
elseif (IsAscii($gbkStr[$index]))
{
$index++;
}
elseif (IsSbcCapital($gbkStr, $index, $length))
{
$sum++;
$index = $index + 2;
}
}
return $sum;
}
/*
$str = 'ABABCDEFCDEFabc王森sdhssdhs王森';
$gbkStr = iconv('UTF-8','GBK',$str);
echo numberSbc($gbkStr);
*/
$myfile = fopen("utf8Pattern.txt", "r") or die("Unable to open file!");
$str = fread($myfile,filesize("utf8Pattern.txt"));
$gbkStr = iconv('UTF-8','GBK',$str);
echo numberSbc($gbkStr);
fclose($myfile);