标签归档:LAMP

php读取mysql中文乱码问题

php中文乱码问题几乎是每一个php初学者都要遇到的问题,php中文乱码问题最典型的就是php读取mysql或向mysql写入数据的时候出现的中文乱码问题。出现php中文乱码问题的时候一般可以通过一下两种方法解决:

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值。

如 default-character-set = utf8

character_set_server = utf8

修改完后,重启mysql的服务,service mysql restart

(2)发送查询query 查询前发送SET NAMES ‘utf8’语句。

mysql_query(“set names utf8”);

之后就可以正常的发送自己的查询语句了。

通过上面的两个方法一般就可以解决php读取mysql中文乱码的问题

php 中文乱码问题原因分析和解决方法

php中文乱码问题对于php初学者来说确实是个令人头疼的问题。出现中文乱码的根本原因是编码不一致所造成的。

php

php

具体来说在php中一般涉及到三个地方的编码,一是php文件的编码,二是html header 头的编码,三是数据库的编码。在php中这三者的编码如果不一致就会出现中文乱码问题。

(1)php文件的编码是指php文件保存时选择的编码格式,一般选择utf-8或者gbk编码格式,如果想改变编码的格式,用ultraedit打开然后在另存为你想要用的编码格式即可。

(2)hmtl的编码即在header头的meta标签中指明的编码格式:

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>

(3)数据库也有自己的编码,如果从数据库取出的数据编码和上面的两个地方的编码不一致,此时也会出现中文乱码问题。我们可以通过修改mysql配置文件my.ini或my.cnf来改变数据库的编码。在文件中查找default-character-set,如果能查到则修改成自己需要的编码,如果查找不到可以自己添加上default-character-set=‘你需要的编码格式’;如果遇到从数据库里取出数据乱码的时候,通常是通过在建立连接之后发送set names ‘你需要的编码’ query语句(示例:mysql_query(“set names utf-8”))的方法来解决这一问题。

我们在平时遇到的中文乱码问题,主要是通过修改这三个地方的编码来解决。首先分析乱码是因为这三者中的那个编码和其他的不一致造成的,然后去修改他的编码。建议在进行开发之前把数据库、php文件、html charset三者的编码设置成一致的utf-8。

php中的字符串(single quote,double quote,heredoc,nowdoc)(二)

php中的字符串(single quote,double quote,heredoc,nowdoc)(一)我们简单总结了php中单引号、双引号、heredoc、nowdoc的用法,这篇文章简单总结一下

总结说明:

1)  heredoc 和双引号差不多,只是在deredoc中双引号不用转义

2)  Nowdoc 和单引号的作用差不多,在nowdoc中单引号不用转义

3) Nowdoc 从php 5.3才开始支持。

4) heredoc是输出html的好工具

例如

因为在html中可能混有单引号和双引号,这是采用heredoc(或者nowdoc)定义就不用做任何转义,用其他两种方式还需要做转义处理。

5)单引号和双引号在处理字符串中变量的差别

$b=3;

echo $a=”$b=5″;//output: 3=5

echo $c=’$b=5′;//output: $b=5

在双引号中php会去检查有没有相应的变量,这是php对字符串贪婪模式的体现,所以如果双引号中无变量的时候,最好用单引号,可以节省一下资源,提高效率。

这一点也引出了{}的用途。

示例:

$friut='apple';
//我们想要的输出是这样的apples are green;。这只是个示例不一定恰当
echo " $friuts are green;";//output: are green;
echo "{$friut}s are green;"//output: apples are green;

php中的字符串(single quote,double quote,heredoc,nowdoc)(一)

本文大部分出自php在线手册相关页面,少量内容为个人经验(如有错误欢迎指正),你也可以参看此页面获得更详细的内容

简单介绍:

一、关于php中的字符串

Php中的字符串和c语言中的类似,是一个字符数组,这个数组的大小是没有限制,只要内存允许,你可以存足够多的字符!

二、单引号

单引号是定义字符串的最简单形式。在单引号内只有单引号(single quote )和反斜线(back slash)需要转义。
实例:

echo $a='Here is 'webfuns.cn'';     //error
echo $aa='Here is \'webfuns.cn'\'; //ok
echo $b=' back slash is \';          //error
echo $bb='back slash is \\';          //ok

三、双引号

双引号相对于单引号有更多需要转义的字符,列表如下:

转义字符 含义
\n 换行符(LF or 0x0A (10) in ASCII)
\r 回车 (CR or 0x0D (13) in ASCII)
\t 水平制表符 (HT or 0x09 (9) in ASCII)
\v 垂直制表符(VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
\f 换页符 (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
\\ 反斜线\
\$ 美元符号$
\” 双引号
\[0-7]{1,3} 正则表达式中匹配八进制字符
\x[0-9A-Fa-f]{1,2} 正则表达式中匹配十六进制字符

四、heredoc

用法:

echo<<

注意:
最后一个标识符(在本例即EOT要和<<<后的字符一致,大小写都可以,但是一定要一致
最后一个EOT必须顶着开头写不能有任何的空格

五、Nowdoc
用法基本和heredoc相同,只是EOT换成了'EOT',加了个单引号。

echo<<<'EOT'
Here is webfuns,you are welcome;
EOT;

php中的全局变量($_POST,$_GET,······)关系整理

PHP中的全局变量

PHP中的全局变量

总结:

1php中的全局变量主要分为系统自动全局变量和用户自定义的全局变量。系统自动全局变量包括:$_POST$_GET$_COOKIE$SESSION等(图示中标为同一颜色的),

用户自定义的全局变量例如:global $a;此处$a即为全局变量。

2)关于全局变量的访问:

#)所有的全局变量都可以通过$GLOBALS[$name]访问。

#$HTTP_*_VARS是旧式的访问方法,这要保证register_long_array是打开的。但是这种方式无法访问$_REQUEST变量和用户定义的变量。图示中有箭头指向$HTTP_*_VARS就表示能够访问。

#)对于不同类的变量可以用不同的方法访问,例如cookie类变量可以用$_COOKIE[$name]访问。

#$_ENV $_SERVER $_GET这些变量有些特殊。比如$_ENV[$key],也可以通过$GLOBALS[$key]访问。

#)$_REQUEST变量包含$_GET $_POST $_COOKIE的变量。就是$_GET[$key],可以通过$_REQUEST[$key]访问。

实例:

比如我们要访问通过url传过来的变量:http://blog.webfuns.net?id=tomheng

以下几种方式都可以访问到这些变量:

$_GET[‘id’]=$_REQUEST[‘id’]=$GLOBLAS[‘_GET’][”id’]

如果register_long_array是打开的:$_HTTP_GET_VARS[‘id’]也可以访问(不安全,一般不适用这种方式)

如果register_global 也打开的换,$id也可以访问(不安全,一般不适用这种方式)

唠叨:

这样一整理可能会更容易理解一下,其实在实践中全局变量没那么复杂,但是这样整理清楚他们的关系之后在一些细节问题上还是有帮助的。