PHP判断字符串编码是否utf8并转换的方法

关于PHP下字符串乱码的问题,当一个页面存在两种编码的时候,无论你乍么选择都会出现乱码,那么如何才能解决这个问题呢?烈火小编给大家提供的办法:

一。首先按国际惯例,检查你的文件编码与数据库、页面编码是否一致。

二。如果“一”没有问题,那么就需要先判断字符串的编码了,我们只要判断一种就可以了,关于检测是否为utf8编码的问题,烈火网以前发表过相关文章,但是不太好用,今天在网上找到一个比较完美的函数,代码如下:

Copy to Clipboard引用的内容:[www.liehuo.net]
function is_utf8($liehuo_net)
{
if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$liehuo_net) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$liehuo_net) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$liehuo_net) == true)
{
return true;
}
else
{
return false;
}

}
现在再来说一下使用方法,高手就不用看了,因为一些初学者不懂得如何引入并使用这个函数,下边是方法。

一。将以上代码保存为独立文件,例如:liehuo_func_validt.php,保存到网站根目录,然后再引入到文件中,加入以下代码:

Copy to Clipboard引用的内容:[www.liehuo.net]
require( "liehuo_func_validt.php" );
接下来判断代码,写在上述代码的下边:

Copy to Clipboard引用的内容:[www.liehuo.net]
if(is_utf8($liehuo)==1)
{
$liehuo = iconv("utf-8","gbk",$liehuo);
}
这样就可以了。

二。将判断函数直接放在文件的顶部使用,再加入判断代码,比较啰嗦了,哈哈。



今天说说编码乱码问题,当一个页面存在两种编码的时候,无论你乍么选择都会出现乱码,解决方法:

1.你据在网页编码是哪个。

2.首先判断字符串编码是否为utf8代码如下:

 

PHP代码
  1. function is_utf8($word)    
  2. {    
  3. 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)    
  4. {    
  5. return true;    
  6. }    
  7. else    
  8. {    
  9. return false;    
  10. }    
  11.   
  12. }   

3.再转换为gb2312,用到转换函数iconv;

 

PHP代码
  1. if(is_utf8($tit)==1)   
  2.    $tit = iconv("utf-8","gbk",$tit);   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断字符串是否为UTF-8编码,需要检查字符串的字节序列是否满足UTF-8编码规则。UTF-8编码规定了字符的编码方式与字节序列的对应关系。 UTF-8编码使用1至4个字节来表示不同的Unicode字符,其编码规则如下: - 单字节编码:对于Unicode码范围在U+0000至U+007F之间的字符,其UTF-8编码为一个字节,范围为0x00至0x7F(十六进制)。 - 多字节编码:对于Unicode码范围在U+0080至U+FFFF之间的字符,其UTF-8编码使用2至4个字节,其中每个字节的最高两位分别为1和0,后面的字节均以10开头。 根据上述规则,我们可以逐字节地检查字符串的字节序列。如果满足上述的字节编码规则,则认为字符串是UTF-8编码。如果不满足规则,则可以判断字符串不是UTF-8编码。 以下是一个简单的示例代码: ```python def is_utf8(string): bytes = string.encode('utf-8') length = len(bytes) i = 0 while i < length: if (bytes[i] & 0b10000000) == 0: # 单字节编码 i += 1 elif (bytes[i] & 0b11100000) == 0b11000000: # 2字节编码 if i + 1 < length and (bytes[i + 1] & 0b11000000) == 0b10000000: i += 2 else: return False elif (bytes[i] & 0b11110000) == 0b11100000: # 3字节编码 if i + 2 < length and (bytes[i + 1] & 0b11000000) == 0b10000000 and (bytes[i + 2] & 0b11000000) == 0b10000000: i += 3 else: return False elif (bytes[i] & 0b11111000) == 0b11110000: # 4字节编码 if i + 3 < length and (bytes[i + 1] & 0b11000000) == 0b10000000 and (bytes[i + 2] & 0b11000000) == 0b10000000 and (bytes[i + 3] & 0b11000000) == 0b10000000: i += 4 else: return False else: return False return True string = "测试UTF-8" result = is_utf8(string) print(result) # 输出:True ``` 以上代码逐字节检查了`string`字符串的字节序列,并判断是否满足UTF-8编码规则。如果输出结果为True,则表示字符串是UTF-8编码,反之则不是。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值