本文目录一览:
php 如何判断字符是否是utf8编码
严格来说,不好判断,但如下方法或许能给你应急处理。
function is_utf8_encode($str, $flag=false){
static $charset = null;
if($charset == null){
//gbk中的汉字,但是满足utf-8的编码规范,对于这些汉字当做gbk字符处理
$charstr = '陇搂篓掳卤路脳脿谩猫茅锚矛铆貌贸梅霉煤眉腻脓臎墨艅艌艒奴菐菒菕菙菛菢菤菧蓱伞艺藟藠藡藱螒螔螕螖螘螙螚螛螜螝蚂螠螡萤螣螤巍危韦违桅围唯惟伪尾纬未蔚味畏胃喂魏位渭谓尉慰蟺蚁蟽蟿蠀蠁蠂蠄蝇衼袗袘袙袚袛袝衮袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褕褕褖褗褘褜褝褞褟褢';
$charset = str_split($charstr, 2);
$charset = array_flip($charset);
}
$pflag = true;
$qflag = false;
$len = strlen($str);
}
php怎样判断字符串是什么编码
php判断字符编码的二个方法:
一个是用php自带的函数mb_detect_encoding
,一个是个人写函数来处理。
方法1,使用mb_detect_encoding
函数。
<?php
$str = "脚本";
echo mb_detect_encoding($str);
?>
方法2,自定义函数。
<?php
function chkbm($string){
$bm = array('ASCII', 'GBK', 'UTF-8');
foreach($bm as $c){
if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){//转换编码后是不是相等
return $c;
}
}
return null;
}
?>
PHP完美判断字符串是否为utf
完美判断函数:
function is_utf8($gonten){
if (preg_match("/^([\x{228}-\x{233}]{1}[\x{128}-\x{191}]{1}[\x{128}-\x{191}]{1}){1}/u",$word) == true ||
preg_match("/([\x{228}-\x{233}]{1}[\x{128}-\x{191}]{1}[\x{128}-\x{191}]{1}){1}$/u",$word) == true ||
preg_match("/([\x{228}-\x{233}]{1}[\x{128}-\x{191}]{1}[\x{128}-\x{191}]{1}){2,}/u",$word) == true){
return true;
}else{
return false;
}
}
使用方法 is_utf8($gonten)
就可以判断字符串 $gonten
是否为utf-8编码了。
网上流传着这样一个判断函数,其实这函数判断是不完整的,函数如下:
function is_utf8($string) {
return preg_match('%^
(?: [\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
', $string);
}
php 中文和编码判断代码
编码范围
- GBK (GB2312/GB18030)
\x00-\xff
:GBK双字节编码范围\x20-\x7f
:ASCII\xa1-\xff
:中文\x80-\xff
:中文
- UTF-8 (Unicode)
\u4e00-\u9fa5
:中文\x3130-\x318F
:韩文\xAC00-\xD7A3
:韩文\u0800-\u4e00
:日文
ps: 韩文是大于
[\u9fa5]
的字符
正则例子
preg_replace("/([\x80-\xff])/","", $str);
preg_replace("/([\u4e00-\u9fa5])/","", $str);
代码例子
判断内容里有没有中文-GBK
function check_is_chinese($s){
return preg_match('/[\x80-\xff]./', $s);
}
获取字符串长度-GBK
function gb_strlen($str){
$count = 0;
for($i=0; $i < strlen($str); $i++){
$s = substr($str, $i, 1);
if(preg_match("/[\x80-\xff]/", $s)) ++$i;
++$count;
}
return $count;
}
截取字符串字串-GBK
function gb_substr($str, $len){
$count = 0;
for($i=0; $i < strlen($str); $i++){
if($count == $len) break;
if(preg_match("/[\x80-\xff]/", substr($str, $i, 1))) ++$i;
++$count;
}
return substr($str, 0, $i);
}
统计字符串长度-UTF8
function utf8_strlen($str){
$count = 0;
for($i = 0; $i < strlen($str); $i++){
$value = ord($str[$i]);
if($value > 127){
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i += 2;
elseif($value >= 240 && $value <= 247) $i += 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return $count;
}
截取字符串-UTF8
function utf8_substr($str,$position,$length){
$start_position = strlen($str);
$start_byte = 0;
$end_position = strlen($str);
$count = 0;
for($i = 0; $i < strlen($str); $i++){
if($count == $position && $start_position > $i){
$start_position = $i;
$start_byte = $count;
}
if(($count - $start_byte) == $length){
$end_position = $i;
break;
}
$value = ord($str[$i]);
if($value > 127){
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i += 2;
elseif($value >= 240 && $value <= 247) $i += 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}
判断是否是有韩文-UTF-8(JavaScript)
function checkKoreaChar(str){
for(i=0; i < str.length; i++){
if(((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) ||
(str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))){
return true;
}
}
return false;
}
判断是否有中文字符-GBK(JavaScript)
function check_chinese_char(s){
return (s.length != s.replace(/[^\x00-\xff]/g,"**").length);
}
php 判断一个字符串里是否有某个字符代码怎么写?
先看下我们的代码,如图,定义了一个字符串,然后调用php的strpos
方法。
$result1 = strpos($str, 'sougou'); // 查找字符sougou在字符串出现的位置。
$result2 = strpos($str, 'sohu'); // 查找字符sohu在字符串出现的位置。
如果查找的字符不在字符串里,即字符串不包含查找的字符,strpos
方法就会返回 false
。
然后是一些输出代码,输出显示我们的结果。
运行代码,看下我们的结果,如图,字符串里有包含sougou
和sohu
啊,为什么结果都显示不包含的?
原来字符串的开始位置是从0开始的,而不是从1开始。0也相当于是false
了,我们修改下代码,判断代码里,加多一个等号(=),即是真正的false
才是没找到字符串。
再次运行代码,结果如图,sougou
字符是有查找到了,sohu
还是没有。
原来strpos
方法是区分大小写的,字符串里的sohu
是大写的S,所以结果是没有找到这个sohu
的字符串。怎么修改?我们可以用另一个方法stripos
,这个方法是不区分大小的。