php字符串乱码怎么解决

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php字符串乱码怎么解决?PHP iconv()函数字符编码转换的问题

php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库;但有时候iconv对于部分数据转码会无缘无故的少一些。比如在转换字符"—"到gb2312时会出错。

下面一起慢慢看一下这个函数的用法。

最简单的应用,把gb2312置换成utf-8:

$text=iconv("GB2312","UTF-8",$text);

在用$text=iconv("UTF-8","GB2312",$text)过程中,如果遇到一些特别字符时,如:"—",英文名中的"."等等字符,转换就断掉了。这些字符后的文字都没法继续转换了。

针对这的问题,可以用如下代码实现:

$text=iconv("UTF-8","GBK",$text);

你没有看错,就这么简单,不使用gb2312,而写成GBK,就可以了。

还有一种方法,第二个参数,加上//IGNORE,忽略错误,如下:

iconv("UTF-8","GB2312//IGNORE",$data);

没有具体比较这两种方法,感觉第一种(GBK代替gb2312)方法更好。

php手册中iconv() 说明:

iconv
(PHP 4 >= 4.0.5, PHP 5)
iconv – Convert string to requested character encoding
Description
string iconv ( string in_charset, string out_charset, string str )
PerfORMs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure.
If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.

在使用这个函数进行字符串编码转换时,需要注意,如果将utf-8转换为gb2312时,可能会出现字符串被截断的情况发生。此时可以使用以下方法解决:

$str=iconv('utf-8',"gb2312//TRANSLIT",file_get_contents($filepath));

即在第二个参数出添加红色字部分,表示:如果在目标编码中找不到与源编码相匹配的字符,会选择相似的字符进行转换。此处也可以使用://IGNORE 这个参数,表示忽略不能转换的字符。

ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。

iconv不是php的默认函数,也是默认安装的模块。需要安装才能用的。

如果是windows2000+php,你可以修改php.ini文件,将extension=php_iconv.dll前的";"去掉,同时你要copy你的原php安装文件下的iconv.dll到你的winnt/system32下(如果你的dll指向的是这个目录)。在linux环境下,用静态安装的方式,在configure时加多一项 --with-iconv就可以了,phpinfo看得到iconv的项。(Linux7.3+Apache4.06+php4.3.2)。

mb_convert_encoding与iconv函数介绍

mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

做一个GBK To UTF-8:

<?php 
header("content-Type: text/html; charset=Utf-8"); 
echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); 
?>

再来个GB2312 To Big5:

<?php 
header("content-Type: text/html; charset=big5"); 
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 
?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。

$content = iconv("GBK", "UTF-8″, $content);
$content = mb_convert_encoding($content, "UTF-8″, "

--结束END--

本文标题: php字符串乱码怎么解决

本文链接: https://www.lsjlt.com/news/470.html (转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢

  • php字符串乱码怎么解决

    php字符串乱码的解决办法:1、通过iconv把gb2312置换成utf-8;2、通过mb_convert_encoding函数转换编码。
    阅读数:961 php 乱码
  • php怎么实现字符串无乱码翻转

    php实现字符串无乱码翻转的方法:1、创建一个PHP示例文件并设置编码为utf8;2、用mb_strlen函获取算utf8字符串的长度;3、将字符串拆开放入数组;4、将数组按键名大小反转;5、将数组中单个字符元素重新组合成字符串即可。
    阅读数:281 php 翻转
  • php字符串怎么去掉重复字符

    去重步骤:1、使用str_split()函数将字符串转为字符数组,语法“str_split(字符串,1)”;2、使用array_unique()函数去除字符数组中的重复值,语法“array_unique(字符数组)”;3、使用implode()函数将去重后的字符数组还原成字符串即可,语法“implode(去重后的字符数组)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑在
    阅读数:540 php php字符串
  • php怎么进行字符串替换

    字符串替换方法:1、使用str_replace()函数,语法“str_replace(查找值,替换值,字符串)”;2、使用substr_replace()函数,语法“substr_replace(字符串,替换值,开始位置,替换长度)”。
    阅读数:420 php 字符串替换
  • php怎么反转字符串abcdefg

    反转方法:1、用strrev()函数,语法为“strrev("abcdefg")”;2、用for语句和substr(),语法“for($i=字符串长度-1;$i>=0;$i--){$r.=substr("abcdefg",$i,1);}”。
    阅读数:522 php 字符串反转
  • php怎么在字符串首部增加字符

    两种实现方法:1、使用字符串连接符“.”将指定字符拼接在字符串开头即可,语法“指定字符 . 字符串”;2、使用substr_replace()函数在字符串开头插入指定字符串,只需要将该函数的第二个参数设置为指定字符,第三个和第四个参数设置为0即可,语法“substr_replace(字符串,指定字符,0,0)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑在PHP中,可以
    阅读数:734 php php字符串
  • php怎么去掉字符串中的某串字符串

    php去掉字符串中的某串字符串的方法:1、创建一个PHP示例文件;2、使用str_replace函数或者preg_replace函数将指定字符串替换为空即可。
    阅读数:243 php
  • php sql 字符串怎么转日期

    php sql字符串转日期的方法:1、通过“date("Y-m-d",strtotime(""));”方式转换;2、通过“date("M-d-Y",mktime(0,0,0,$month,$day,$year));”方式转换。
    阅读数:966 php 字符串 日期
  • json字符串怎么转为php变量

    在php中,可以利用json_decode()函数来将json字符串转换为PHP变量;该函数可用于解码JSON字符串,它接受一个JSON编码的字符串并且把它转换为PHP变量,语法“json_decode($json)”。
    阅读数:613 json字符串 php变量
  • php 字符串怎么转url实体

    php字符串转url实体的方法:1、通过parse_url()解析url;2、对url的中文进行编码和解码;3、通过htmlentities等方法将字符串转换为html实体即可。
    阅读数:938 php
  • php怎么去掉字符串空行

    php去掉字符串空行的方法:1、创建一个PHP示例文件;2、通过“function DeleteHtml($str){...}”方法去掉html中的空行或空白即可。
    阅读数:226 php 空行
  • php怎么实现数字转字符串

    php实现数字转字符串的方法:1、创建一个PHP示例文件;2、定义一个数字;3、通过“string strval ( mixed $var )”方法将数字转成字符类型即可。
    阅读数:957 php 数字 字符串
  • php怎么将字符串转为小数

    php将字符串转为小数的方法:1、使用number_format()函数,语法“number_format($str,小数位数值)”;2、利用sprintf()函数格式化字符串,语法“sprintf("%.小数位数值f",$str)”。
    阅读数:188 php 字符串转小数
  • php怎么将字符串重复几次

    在PHP中,可以使用str_repeat()函数来将字符串重复指定的次数,并返回被重复的字符串;语法“str_repeat(string,repeat)”,参数“repeat”规定字符串将被重复的次数,其值必须大于等于0。
    阅读数:846 php 字符串重复
  • php怎么判断字符串是几位

    php判断字符串是几位的方法:1、使用strlen()函数,可获取英文字符串的字符个数,语法“strlen($str)”;2、使用mb_strlen()函数,语法“mb_strlen($str ,$encoding)”。
    阅读数:687 php 字符串
  • php中字符串怎么去掉括号

    在PHP中,可以利用“str_replace()”函数去掉字符串中的括号,该函数用于替换字符串中的一些字符,并且区分大小写,语法为“str_replace("括号","",字符串);”。
    阅读数:462 PHP
  • php怎么对比字符串是否不同

    三种对比方法:1、使用比较运算符(==、===、>、等)进行对比,例“字符串1==字符串2”,可比较两字符串是否相等;2、使用strcmp()以区分大小写的方式比较两个字符串,语法“strcmp(字符串1,字符串2)”;3、使用strcasecmp()以不区分大小写的方式比较两个字符串,语法“strcasecmp(字符串1,字符串2)”。本教程操作环境:windows7系统、PHP8.1版、DEL
    阅读数:775 php php字符串
  • php怎么查询字符串出现位置

    4种方法:1、用stripos(),返回第一次出现的位置(不区分大小写),语法“stripos(字符串,查询值)”;2、用strpos(),返回第一次出现的位置(区分大小写),语法“strpos(字符串,查询值)”;3、用strripos(),返回最后一次出现的位置,语法“strripos(字符串,查询值)”;4、用strrpos(),语法“strrpos(字符串,查询值)”。本教程操作环境:win
    阅读数:796 php php字符串
  • php怎么将boolean转为字符串

    php将boolean转为字符串的方法:1、在boolean类型的变量之前加上用括号括起来的目标类型“(string)”,语法“(string)$bool”;2、使用strval()函数,语法“strval($bool)”。
  • php怎么将字符串替换星号

    php将字符串替换星号的方法:1、新建一个php文件;2、创建一个字符串变量;3、使用str_replace函数将字符串中“abc”替换为星号;4、使用echo输出替换后的字符串即可。
    阅读数:798 php 星号