php 所有编码转换utf8,php 所有编码转换utf8 php编码问题 php编码问题有哪些

PHP是超文本预处理器,对于很多程序员的人来说,在编写PHP时一定要特别小心,因为编码很容易出错,而稍有一个字母出错很可能会导致整个页面出错,那么,下面我将为大家分析php编码问题,看下常见的php编码问题有哪些,一起来看看吧!

php编码问题

1. Win32下apache2用get方法传递中文参数会出错

test.php?a=你好&b=你也好

传递参数是会导致一个内部错误

解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)

2. win32下的session不能正常工作

php.ini默认的session.save_path = /tmp 这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,

例如session.save_path = c:/windows/temp

3. include和require的区别

两者没有太大的区别,如果要包含的文件不存在, include提示notice,然后继续执行下面的语句,require提示致命错误并且退出,据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。

4. isset()和empty()的区别

两者都是测试变量用的。但是 isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有 notice提示。如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。

要注销一个变量,可以用 unset($foo)或者$foo=NULL。

5. mysql查询语句包含有关键字

2984e69a393778dd7fa7fd16fd0e3b59.png

php查询mysql的时候,有时候mysql表名或者列名会有关键字。这时候查询会有错误。例如表名是order,查询时候会出错。简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别, 这样就不会因为误用关键字而出现错误。

例如select * from `order` 。

6. 数组非数字键名引号的必要性

PHP 会把数组中非数字键名没有引号引起来的键名当作是常量去获取, 当找不到的时候, 抛出一个NOTICE(Notice: Use of undefined constant ......), 然后再根据”常量名”生成一个字符串, 数组中的非数字键的键名一定要有引号,在字符串变量替换的时候, 写引号会导致错误, 虽然这种错误提示可以通过 error_reporting()进行屏蔽,但好的程序,自适应的代码是不应该通过这种方法进行伪装的。标准写法:

$array[1] = 'abc';

$array['key'] = 2; Bad: $array[key] = 2;

$string = "variable value is {$array['key']}"

另:在非数字键名不加引号的生成OPCODE中明显多一条指令:FETCH_CONSTANT

7. 使HTML/PHP格式的字符串如何照原样显示

如:

$str="HTML";

echo "被解释处理过的: ".$str;

echo htmlentities(nl2br($str));

?>

8. 一切写入数据库中的数据都应该进行必要的验证和过滤

写入前

$string = addslashes($string);

INSERT TABLE SQL

读取时

$string = stripslashes($string);

显示时

$string = htmlspecialchars(nl2br($string))

9. PHP文件中的结尾符号 ?>

在文件中 ?> 结尾符号它不是必需的。有时就可以不必要加上,这样可以避免产生一些难于调试的错误问题。例如,在使用header()函数来重定向(redirect)时,如果在其前面某个包含文件中 ?> 后面不小心加上了空格就会出现错误。

10. 正则表达式URL 我在项目常用到的

$link = "A http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 asdf/asd.sdf http://www.s.flash你好 asdfas./asd.sd http://bbs.400.com.cn/gg/wjdpy.mp3 http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371";

$pattern = "/(https{0,1}:[a-zA-Z0-9_/-]+/.[a-zA-Z0-9_/-/./%/?=///&/+#]+)/";

preg_match_all($pattern, $link, $matches);

print_r($matches[0]);

结果:Array ( [0] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 [1] => http://www.s.flash [2] => http://bbs.400.com.cn/gg/wjdpy.mp3 [3] => http://p.you.video.sina.com.cn/player/outer_player.swf?auto=1&vid=25542767&uid=1154209371 )

11. PHP中的JSON数据存储格式

在非UTF-8编码下,中文字符将不能被json_encode,否则结果会是空值。所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值