当前位置:首页 » 编程语言 » php字符编码

php字符编码

发布时间: 2022-01-10 06:34:24

A. 怎样设置php的编码格式为utf-8

在 PHP 编写过程中,一般需要注意的是三种编码:
1、网页字符编码
2、文件字符编码
3、数据库字符编码
只有上面3种编码的格式都一致的情况下,才会尽可能的避免乱码的出现。
二、如何使用Notepad++软件设置UTF-8编码:
用 Notepad++ 软件打开指定的 php 文档后,在“格式”菜单下找到“以UTF-8格式编码"
以xxx编码的意思是不强制转换文件的编码,仅仅以某种编码来查看,不会对文件进行修改,这对打开某个文件发现都是乱码时非常实用。
转为xxx编码的意思就是将文件内容强制转换为某种编码,这对于本来看到的就不是乱码但需要调整右下角的文件编码时非常好用。

B. PHP中哪个函数可以强制统一设置所有字符编码为指定编码

一般都是utf-8和gbk,gbk的一般没有什么问题。
utf-8最好在apache服务端就设定为utf-8。然后其他的地方,数据库、文件都设置为UTF-8,就不会有错了。
在php函数库有一个函数:iconv(),iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。
最近在做一个小偷程序,需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些。 让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数的一个bug。iconv在转换字符"—"到gb2312时会出错。

php编程技术:
PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。

C. php 字符编码问题

做php最好是编码统一, 页面utf8, 数据库gb2312, 这样做,除了难为你自己还有别的好处吗?
如果你非要这么做, 那你必须将$name11="张三" 转成gb2312编码, 然后读取出来显示到页面的时候, 必须转成utf8, 不累的慌?

D. PHP中如何把一个字符串转换为utf-8编码的 如题 谢谢了

1、把 GBK 编码字串转换成 UTF-8 编码字串 view plain to clipboardprint? <?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("你是我的好朋友","UTF-8","GBK"); ?> 2、把 UTF-8 编码字串转换成 GB2312 编码字串 view plain to clipboardprint? // 注意将此文件存盘成 utf-8 编码格式文件再测试 <?php header("content-Type:text/html;charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb2312","utf-8"); ?> // 注意将此文件存盘成 utf-8 编码格式文件再测试 <?php header("content-Type: text/html; charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb312","utf-8"); ?> 3、对整个页面进行转换 该方法适用所有编码环境。这样把前128个字符以外(显示字符)的字符集都用 NCR(Numeric character reference,如“汉字”将转换成“汉字”这种形式)来表示,这样的编码在任意编码环境下页面都能正常显示。 在php文件的头部加上下面三行代码: view plain to clipboardprint? mb_internal_encoding(”gb2312″); // 这里的gb2312是你网站原来的编码 mb_http_output(”HTML-ENTITIES”); ob_start(’mb_output_handler’); mb_internal_encoding(”gb2312″); // 这里的gb2312是你网站原来的编码 mb_http_output(”HTML-ENTITIES”); ob_start(’mb_output_handler’); 使用mb_convert_encoding 函数需启用PHP 的mbstring (multi-byte string)扩展

E. php 一般设默认编码是什么

也可以给每个文件设置默认编码,但是比较麻烦,不建议这样做。建议直接找到配置文件,然后将编码格式设置成自己需要的类型即可。

F. PHP的字符转成ANSI编码。。。求助。。。

用notepad++吧
选择“格式”->"专为ANSI编码"
ok

G. PHP中文编码~~

一、页面编码

1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和Mysql不同,MySQL是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意,<meta>是属于html信息的,仅仅是一个声明,它起作用表明服务器已经把HTML信息传到了浏览器。

2. header("content-type:text/html; charset=xxx");

这个函数header()的作用是把括号里面的信息发到http标头。

如果括号里面的内容为文中所说那样,那作用和<META>标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差别了:

https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。

因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta(不知道可不可以这样讲)。加入一个php页面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,浏览器就只认前者http标头而不认meta了。当然这个函数只能在php页面内使用。

同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了。

3. AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。

用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就相当于给每个文件都加了一行header("content-type:text/html; charset=xxx")。这下就明白为什么明明meta设置了是utf-8,可浏览器始终采用gb2312的原因。

如果网页里有header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把AddDefaultCharset xxx前面加个“#”,注释掉这句,而且页面里不含header("content-type…"),那这个时候就轮到meta标签起作用了。

4. default_charset

在 php.ini 文件中可以定义 php 的默认语言: default_charset = "xxx",xxx为编码名称。这行代码的意思是设置所有 php 的输出页面编码为 xxx。

总结:

以上 4 种编码设置方法的优先级如下:

header("content-type:text/html; charset=xxx")
default_charset xxx
AddDefaultCharset xxx
<META http-equiv="content-type" content="text/html; charset=xxx">
如果你是web程序员,给你的每个页面都加个header("content-type:text/html; charset=xxx"),保证它在任何服务器都能正确显示,可移植性强。

至于那句AddDefaultCharset xxx,要不要注释就仁者见仁了。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示。

二、数据库编码

PHP 程序在查询数据库之前,首先执行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入mysql_query(“set names”)就可以了。

SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。)

三、中文文件名

默认情况下,文件名为中文时不能访问。要使中文文件名能正常访问,需进行如下设置:

在ie中选择 工具 -> internet选项 -> 高级 -> 取消“总是以UTF-8发送URL”。

H. php怎样判断字符串是什么编码

php判断字符编码的二个方法:
一个是用php自带的函数mb_detect_encoding,一个是个人写函数来处理。
方法1,使用mb_detect_encoding函数。
?

1
2
3
4

<?php
$str=”<a href="http://www..com/" target="_blank" class="infotextkey">脚本</a>”;
echo mb_detect_encoding($str);
?>

方法2,自定义函数。
?

1
2
3
4
5
6
7
8
9
10
11

<?php
function chkbm($string){
$bm = array(‘ASCII’, ‘GBK’, ‘UTF-8′);
foreach($bm as $c){
if( $string === <a href="http://www..com/" target="_blank" class="infotextkey">iconv</a>(‘UTF-8′, $c, iconv($c, ‘UTF-8′, $string))){//转换编码后是不是相等
return $c;
}
}
return null;
}
?>

I. php 怎样判断字符串是哪种编码

php中有个函数可以用来检查当前字符串的编码类型
mb_detect_encoding($str,array('ASSCII',''GB2312','UTF-8));
PHP用MBString库的函数
$e=mb_detect_encoding($text, array('UTF-8', 'GBK'));
switch($e){
case 'UTF-8' : //如果是utf8编码
break;
case ‘GBK’: //如果是gbk编码
break
}

J. PHP的字符编码17符号代替问题,怎么解决

近日,公司的论坛管理员发了一个帖子链接给我,说标题修改以后和实际的显示不一样。我打开之后发现,原始标题为:“手贱洗包浆,洗洗更健康”,但在title显示成了 “手贱洗包浆,洗洗更降”。

于是乎,在本地测试环境下进行了编辑测试未发现异常,服务器上对其它帖子也进行了编辑保存也为发现问题。

看来需要跟踪一下源代码了,发现上面的标题在执行了一下代码之后发生了变化:

1 $thread['subject'] = str_replace("【",'',$thread['subject']);

2 $thread['subject'] = str_replace("】",'',$thread['subject']);

至此,可以肯定问题出在了这里,然而到底是什么问题导致的呢,初步考虑是

1,服务器环境有问题

2,编码处理不一致

经过多个服务器环境测试后,发现问题依旧,可以排除服务器因素

之后测试编码处理,先将要替换的字符和查询的字符串转成UTF-8编码,之后进行替换测试发现问题不存在了。

于是修正上面的代码为:

1 $rep1 = iconv('GBK', 'UTF-8', "【");

2 $rep2 = iconv('GBK', 'UTF-8', "】");

3 $thread['subject'] = iconv('GBK', 'UTF-8', $thread['subject']);

4 $thread['subject'] = str_replace(array($rep1, $rep2),array('',''), $thread['subject']);

5 $thread['subject'] = iconv('UTF-8', 'GBK', $thread['subject']);

解决问题。

终极问题分析:

由于计算机是基于二进制代码运行的,因此php在执行替换的时候也是将非ASCII字符转成了ASCII编码之后进行查找替换,使用十六进制工具查看这些字符的二进制情况,结果如下:

【 的十六进制为 A1 BE

的十六进制为 A1 BF

健康的十六进制为 BD A1 BF B5

降的十六进制为 BD B5

通过以上的十六进制数据不难发现,健康的ASCII码里面正好存在】的ASCII码,于是被替换,留下了降的ASCII码。

由此可知,在字符串查找替换的时候,如果是非ASCII编码字符串很容易出现这种问题,通过转码到UTF8或者Unicode编码能否彻底的解决此问题还有待考证!

热点内容
李小璐贾乃亮超级访问 发布:2024-12-25 22:47:50 浏览:716
电信精品宽带多ip路由如何配置 发布:2024-12-25 22:45:44 浏览:381
在linux下安装python 发布:2024-12-25 22:40:42 浏览:336
路由搭建本地dns解析服务器 发布:2024-12-25 22:31:58 浏览:210
ftp怎么上传5g以上大文件 发布:2024-12-25 22:31:15 浏览:159
吃鸡如何听声辨位安卓 发布:2024-12-25 22:31:03 浏览:264
二分查找法php 发布:2024-12-25 22:31:01 浏览:500
c树的存储 发布:2024-12-25 22:26:07 浏览:47
麦块有什么服务器 发布:2024-12-25 22:12:58 浏览:374
网上比较火的安卓系统是什么 发布:2024-12-25 21:57:06 浏览:993