PHP中文乱码问题及解决方法

 更新时间:2016年11月25日 17:41  点击:1579

<html>

<head>
<title></title>
</head>

<body>

<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='000000';
$mysql_database='lib';
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database);
$sql="select name,age from mytb";
print($conn);
$rs=mysql_db_query("lib","select * from mytb",$conn);
print("n<br>");
while($row = mysql_fetch_object($rs)){
print ($row->name.":".$row->age."<br>");
}
mysql_close($conn);
?>

  显示如下:

Resource id #1
dd:54
ddd:8
??:15
???:25
??:32

  mysql编码:utf8,GBK都试过了。mysql font 和命令行显示都正确。

  问题补充:

  乱码:

???:15
???:25
??:32

  这几行,数据库里的值是汉字.显示出来的是问号.

  解决办法:

  在$rs=mysql_db_query("lib","select * from mytb",$conn);

  前面加上

  mysql_query("set names gb2312");或者mysql_query("set names gbk");

function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec (float)$sec);
}

$time_start = getmicrotime();//开始计时, 放在程序头

for ($i=0; $i < 1000; $i ){
//do nothing, 1000 times
}

$time_end = getmicrotime();//结束计时, 放在尾部
$time = $time_end - $time_start;

echo "Did nothing in $time seconds";

文本要害字:程序设计/PHP/技巧

  【1】页面之间无法传递变量

  get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。
  当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

  【2】Win32下apache2 用get方法传递中文参数会出错

  test.php?a=你好&b=你也好
  传递参数是会导致一个内部错误
  解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
  .............

  【3】win32下的session不能正常工作

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

  【4】显示错误信息

  当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,假如你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽
  例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

  【5】Win32下mail()不能发送电子邮件

  在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件
  修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
  php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器

  【6】初装的mysql假如没有设置密码,应该使用
 
  update mysql.user set password="yourpassword" where user="root"
  修改密码

  【7】header already sent

  这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

  【8】更改php.ini后没有变化

  重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置

  【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)

  PHP4的php4isapi.dll似乎和2003有些冲突,只能用CGI模式安装
  步骤一,先www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站-->应用程序配置
  步骤二:点击 web服务扩展 -->新建web服务扩展.
  步骤三: 扩展名-->php,然后添加
  步骤四:找到php.exe的路径添加上去。
  步骤五: 确定就可以了!
  步骤六: 选择php的服务扩展,然后点击答应。

  【10】 有时候sql语句不起作用,对数据库操作失败

  最简便的调试方法,echo那句sql,看看变量的值能得到不

  【11】include和require的区别

最近在写bbs中,遇上代码转换问题。寻找了很久,才得到一个比较完善的解决办法,可以彻底还原发文者的原文。

以下贴出,供大家指正。

系统:linux php4 oracle8i
以下为引用的内容:
<?
//--标题,名字等字段入库处理(去首尾空格)
function trans_string_trim($str) {
$str=trim($str);
$str=eregi_replace("'","''",$str);
$str=stripslashes($str);
return $str;
}
//--文章入库处理,即textarea字段;
function trans_string($str) {
$str=eregi_replace("'","''",$str);
$str=stripslashes($str);
return $str;
}
//--从库中显示在表单中;在text中以trans转换,在textarea中,无需转换,直接显示
//--显示在WEB页面,过滤HTML代码;包括链接地址
function trans($string) {
$string=htmlspecialchars($string);
$string=ereg_replace(chr(10),"<br>",$string);
$string=ereg_replace(chr(32)," ",$string);
return $string;
}
//--显示在WEB页面,不过滤HTML代码;
function trans_web($string) {
$string=ereg_replace(chr(10),"<br>",$string);
$string=ereg_replace(chr(32)," ",$string);
return $string;
}
//--显示在WEB页面,过滤HTML代码及头尾空格,主要用于显示用户昵称
function trans_trim($string) {
$string=trim($string);
$string=htmlspecialchars($string);
$string=ereg_replace(chr(10),"<br>",$string);
$string=ereg_replace(chr(32)," ",$string);
return $string;
}
//--显示在span中;
function trans_span($string) {
$string=ereg_replace(chr(10),"n",$string);
$string=ereg_replace(chr(32)," ",$string);
$string=ereg_replace('"',""",$string);
return $string;
}
//--在WEB上显示cookie,过滤html
function trans_cookie($str) {
$str=trans($str);
$str=stripslashes($str);
$str=eregi_replace("''","'",$str);
return $str;
}
?>


最后,顺带补充一点,假如在span中显示文章中的一段,采用substr取定长字符串时,记得在span的参数后面多加一个空格,否则遇上截到半个汉字时,会搞乱html代码。

引言:

关于PERL与PHP中的包含路径一直是一个比较难解的问题,主要是与操作系统和WEB服务器有关,不可能非常智能化的解决这个路径问题。相对于PERL,PHP的路径好得多,解决起来也轻易得多,因为PHP的相对路径在PHP程序中的任何场合都可以使用,而不象PERL在某些语句中必须用绝对路径而导致移植的极其复杂。

基于此,在PHP中,我设计了一个绝对稳妥的解决方案,如下所述。

原则:

使用相对路径,但在相对路径中用绝对路径(有点绕,待会儿详解),一是可以保证可移植性,二是可以方便地修改,三是公式化且结构清楚明了,易于扩展。

步骤详解:

1、先确定好一个程序的根目录,注重是文件系统下的,不是WEB服务器下的虚拟目录,不过一般情况下该目录下的子目录的相对路径与URL下该目录的虚拟子目录是相同的。

2、在定义好的程序根目录下的每个子目录下(其实不一定是每个,根据需要)建立一个settings.php,里面定义一个变量或是常数(常数比较好,因为作用域比较大),如APPROOT,但这个APPROOT却不是绝对路径,而是该目录相对于你指定的程序根目录的相对路径。

3、在此目录下的所有程序入口文件(也即第一个包含其它文件的文件,或是答应直接在浏览器中浏览的文件)中第一句写上require_once('settings.php');,但要注重,所有被包含文件最好不要加此句

[!--infotagslink--]

相关文章

  • php生成二维码中文乱码问题解决方法

    最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • 总结android studio注意事项及打不开等问题解决方法

    经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • PHP json_encode() 函数详解及中文乱码问题

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<&#63;php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
  • MySQL ERROR 2013 (HY000)错误解决方法

    当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,...2015-03-15
  • IE6-IE9中tbody的innerHTML不能赋值的解决方法

    IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3...2014-06-07
  • Mysql修改datadir导致无法启动问题解决方法

    centos6.2,停止mysqld然后修改/etc/my.cnf datadir的位置,启动mysqld提示FAILED,查看日志 复制代码 代码如下: 120609 11:31:31 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 120609 11:35:12 my...2015-03-15
  • Photoshop提示“此产品的许可证已过期"及“无法开始您的Adobe Photoshop CS5.1 订阅”解决方法

    首先不要鄙视我用Photoshop盗版,实在是贵。现在我们来看看如果你的Photoshop提示“此产品的许可证已过期",还有“无法开始您的Adobe Photoshop CS5.1 订阅”如何解决吧...2016-09-14