PHP判断字符串编码是否为utf-8的程序代码

我们以前常用mb_detect_encoding()此函数检测字符编码

 

 代码如下 复制代码
//判断字符串是什么编码
if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) {
}
else {//如果是gb2312 的就转换为utf8的
$tag = mb_convert_encoding($tag, 'UTF-8', 'GB2312');
}

 $keytitle = “%D0%BE%C6%AC”;时。检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
怎么解决呢,我的办法是:

 代码如下 复制代码

$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK','UTF-8');

个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。

上面办法还是解决不了,下面又找到了一个解决方法。

例1

 代码如下 复制代码

// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($word)
{
if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)
{
return true;
}
else
{
return false;
}
} // function is_utf8

时间: 2024-10-28 22:14:50

PHP判断字符串编码是否为utf-8的程序代码的相关文章

php 判断字符串编码是utf-8 或gb2312实例_php实例

php 判断字符串编码是utf-8 或gb2312 第一种方法: function is_gb2312($str) { for($i=0; $i<strlen($str); $i++) { $v = ord( $str[$i] ); if( $v > 127) { if( ($v >= 228) && ($v <= 233) ) { if( ($i+2) >= (strlen($str) - 1)) return true; // not enough cha

python使用chardet判断字符串编码的方法_python

本文实例讲述了python使用chardet判断字符串编码的方法.分享给大家供大家参考.具体分析如下: 最近利用python抓取一些网上的数据,遇到了编码的问题.非常头痛,总结一下用到的解决方案. linux中vim下查看文件编码的命令 set fileencoding python中一个强力的编码检测包 chardet ,使用方法非常简单.linux下利用pip install chardet实现简单安装 import chardet f = open('file','r') fencodin

php判断字符串编码函数

mb_detect_encoding()($str);  代码如下 复制代码 //判断字符串是什么编码 if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) { } else {//如果是gb2312 的就转换为utf8的 $tag = mb_convert_encoding($tag

用正则表达式判断字符串是汉字还是拼音的js函数代码_正则表达式

复制代码 代码如下: function checkFormat(str) { if (escape(str).indexOf("%u")!=-1) alert("不能含有汉字"); else if(str.match(/\D/)!=null) { alert('不能含有字母'); } }

php 判断字符串中是否包含html标签

 本篇文章主要是对使用php判断字符串中是否包含html标签的实例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 function judgeHtml($str){  if($str != strip_tags($str)){   echo '有';  }else{   echo '无';  } } judgeHtml('<p>a'); echo '<br />'; judgeHtml('a'); 输出:有        无   

Shell脚本计算字符串长度和判断字符串为空小技巧_linux shell

一些需要注意的脚本问题 计算字符串长度可用的三种方法: 复制代码 代码如下: echo "$str"|awk '{print length($0)}' expr length "$str" echo "$str"|wc -c 但是第三种得出的值会多1,可能是把结束符也计算在内了 判断字符串为空的方法有三种: 复制代码 代码如下: if [ "$str" =  "" ] if [ x"$str&qu

C语言OJ项目参考(2802)判断字符串是否为回文

2802: 判断字符串是否为回文 Description 编写程序,判断输入的一个字符串是否为回文.若是则输出"Yes",否则输出"No".所谓回文是指順读和倒读都是一样的字符串. Input Output Sample Input** abcddcba Sample Output Yes 参考解答: #include<stdio.h> #include<string.h> int main() { char s[100]; int i,j;

PHP学习笔记之字符串编码的转换和判断_php技巧

复制代码 代码如下: iconv('GBK', 'UTF-8//IGNORE', ''); // 将字符串由 GBK 编码转换为 UTF-8 编码 但 iconv 只能解决编码预先知道的情况,如果字符串编码未知,则需要先探测其编码,这时可能会用到 mb_string 扩展库: 复制代码 代码如下: mb_detect_encoding(''); 可是 mb_detect_encoding 存在一个硬伤,经常出现判断不准确的情况.或许这样就可以解决: 复制代码 代码如下: // 使用 iconv

浅析PHP中的字符串编码转换(自动识别原编码)

本篇文章是对PHP中字符串编码转换的实现代码进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: /**  * 对数据进行编码转换  * @param array/string $data       数组  * @param string $output    转换后的编码  */ function array_iconv($data,$output = 'utf-8') {  $encode_arr = array('UTF-8','ASCII','GBK','GB2312','