php常用的运算符 及操作符号详解

 更新时间:2016年11月25日 17:40  点击:1568

<?php教程
/*运算符号(PHP)操作符号
 *
 * 按运算符号功能分为:
 * 一、算术运算符   + - * / % ++ --
 * 二、字符串运算符 . 连接运算符
 * 三、赋值运算符   = += -= *= /= %= .=
 * 四、比较运算符   > <  >= <= == === != <> !==
 *  比较运算符---条件运算符---关系运算符
 *  比较后的结果只有一种:boolean true false
 *  === 比较时不仅要求内容相同,也要求类型相同
 *  !== 比较时内容不相同,也要求类型不相同
 * 五、逻辑运算符   &&或and ||或or  !或not
 *  逻辑运算符只能操作bool型的值,返回的也是bool型的值
 * 六、位运算符     &  |  ^  ~  << >>  >>>
 * 七、其他运算符   ?  :  ``   @  =>  ->   ::  & $
 *  ``  用来执行操作系统内核
 *  @   用来屏蔽掉错误信息
 * 建议使用“()”改变表达式的优先级别
 *
 * % 有两个目的:整除运算;控制范围,不要用小数,也不要用负数
 * % 会吧运算符两边的数转为整数后再进行整除求余。
 */

 //用 %符号判断闰年
 

$year=2011;
 if(($year%4==0 && %year%100!=0) || $year%400=0)
 {
  echo "run nian";
 }
 else
 {
  echo " not run nian";
 }
 


 // ++  --符号的使用
 $a=10;
 $a++; //$a=$a+1; 先用变量,再自增1
 ++$a; //$a=$a+1; 先自增1,在用变量
 $a--; //$a=$a-1; 先用变量,再自减1
 --$a; //$a=$a-1; 先自减1,再用变量
 echo $a; //结果为10
 
 //++ -- 运算的区别

 $a=10;
 $b=$a++;//b=10,a=11
 $c=--$b;//c=9,b=9
 $d=$c++ + ++$c; //d=20,c=11
 $e=$d-- - --$d; //d=18,e=2
 echo $d;


 
 //字符串运算符 .   的使用
 $name="tom";
 $age=27;
 $height=1.75;
 echo "我的名字是:{$name}我的年龄是:{$age}我的身高是:{$height}米<br>";
 echo '我的名字是:'.$name.'我的年龄是:'.$age.'我的身高是:'.$height.'米'.'<br>';
 echo "$age=".$age; //$age=27
 
  echo "我的名字是:{$name}我的年龄是:{$age}我的身高是:{$height}米<br>";//赋值运算符的使用
 

$a=10;
 $a+=10; //$a=$a+10;
 $a-=10; //$a=$a-10;
 $a*=10; //...
 $a/=10; //...
 $a%=10; //$a=$a%10;
 $a.="abc";//$a=$a."abc";
 echo $a;
 $str='<table>';
 $str.='<tr>';
 $str.='<td>';
 $str.='</td>';
 $str.='</tr>';
 $str.='</table>';
 echo $str;//输出一个表格

 //比较运算符
 var_dump(15>6);//返回 bool(true)
 $a=15;
 if(15==$a)
 {
  echo "a=15";
 }
 else
 {
  echo "a!=15";
 }
 
 

//逻辑运算符的使用

 var_dump(true && true);//true
 var_dump(true && false);//false
 var_dump(true || false);//true
 var_dump(!true);//false
 var_dump(!false);//true
 //判断用户名密码
 $username="admin";
 $password="123456";
 $email="290080604@qq.com";
 if($username=="admin" && $password="123456")
 {
  echo "用户名密码正确";
 }
 if($username=="" || $password=="" || $email=="")
 {
  echo "一个都不能为空";
 }

 

//位运算符
 $a=20;  //00010100
 $b=30; // 00011110
 /*
  *   20  00010100
  *   30  00011110      &
  *-----------------------------------
  *  00010100
  *
  */
 $c=$a & $b;
 echo $c;


 /*补充,&  |  也可以用做逻辑运算
  * &&和||的 短路问题:
  *  &&在作运算时,如果前面的数为false,则后面是否为true,整个表达式都为false,所以就不去执行后面的操作数;
  *  ||在作运算时,如果前面的数为true,则后面的数是否为false,整个表达式都为true,所以就不去执行后面的操作数;
  *  然而,& 或者 | 在作运算时,两边都会被执行
  */
 $a=10;
 if($a>5 || $a++<100){}
  echo $a;//输出10
 $b=10;
 if($b>5 | $b++<100){}
  echo $b;//输出11


 /*
位的概念:一个位是由8个二进制数组成的(例00000000),
 一个字节由8个位组成,那么就有32个二进制数。


原码:最高位 用0表示正数,1表示负数

+7  00000111
-7  10000111


反码:一个数如果为正,则它的反码与原码相同;
      一个数如果为负,则符号位为1,其余各位是对原码取反;
+7  00000111
-7  11111000

+0  00000000
-0  11111111

补码:一个数如果为正,则它的补码与反码与原码相同
      一个数如果为负,则它的补码=反码+1,去掉最高位的溢出位
     
      -7  原码 10000111  反码11111000
                                     +1
                           补码11111001
                          
已知一个负数的补码,把它转换为十进制数。
1.先对各位取反
2.将其转换为十进制数
3.加上负号,再减去1。

例:补码11111010
    取反00000101
             4+1=5
    -5-1=-6
   
位运算符:
& 按位与     |按位或    ^按位异或 ~按位取反

例:  按位与   01101101
              &00110111
               00100101
               结论:只有1 1为1。
      按位或   01101101
              |00110111
               01111111
               结论:只有0 0为0。
      按位异或 01101101
              ^00110111
               01011010
               结论:只有1 0或0 1时为1。(也可以理解为处于不同状态为1(真))
      按位取反 ~00110111
                11001000
                结论:将0变1,1变0


移位运算符:
 左移:<<       带符号右移:>>     无符号右移:>>>
 
 例:数   x         x<<2         x>>2     x>>>2
     17 00010001   01000100    00000100  00000100
    -17 11101111   10111100    11111011  00111011
    结论:正数左右移动都补0,负数左移补0,带符号右移补1,不带符号补0
 
 
*/

 //其他运算符的运用
 $a=10;
 $b=$a>5 ? $a : 5;//三元运算符,如果成立$b=$a否则$b=5
 echo $b;
 
 //用``来执行操作系统shell命令
 $str=`ipconfig /all`;
 echo '<pre>';
 echo $str;
 echo '</pre>';


?>

本部分列出了在 PHP 中使用的各种运算符:

算数运算符

运算符 说明 例子 结果
+ Addition x=2
x+2
4
- Subtraction x=2
5-x
3
* Multiplication x=4
x*5
20
/ Division 15/5
5/2
3
2.5
% Modulus (division remainder) 5%2
10%8
10%2
1
2
0
++ Increment x=5
x++
x=6
-- Decrement x=5
x--
x=4

赋值运算符

运算符 说明 例子
= x=y x=y
+= x+=y x=x+y
-= x-=y x=x-y
*= x*=y x=x*y
/= x/=y x=x/y
.= x.=y x=x.y
%= x%=y x=x%y

比较运算符

运算符 说明 例子
== is equal to 5==8 returns false
!= is not equal 5!=8 returns true
> is greater than 5>8 returns false
< is less than 5<8 returns true
>= is greater than or equal to 5>=8 returns false
<= is less than or equal to 5<=8 returns true

逻辑运算符

运算符 说明 例子
&& and x=6
y=3

(x < 10 && y > 1) returns true

|| or x=6
y=3

(x==5 || y==5) returns false

! not x=6
y=3

!(x==y) returns true

php教程中文乱码

中文名乱码是因为:
FCKeditor使用UTF-8编码,
自己机子比如是Windows系统
文件名使用的是GBK编码,
在上传中需要,改下编码,从UTF-8到GBK


==>第一个思路,转码思路,要修改两个文件,第一个文件:
.fckeditoreditorfilemanagerconnectorsphpcommands.php 文件

里面有一个 FileUpload 函数:

move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
改为
move_uploaded_file( $oFile['tmp_name'], iconv("utf-8","gbk",$sFilePath) ) ;

----------

第二个文件:

.fckeditoreditorfilemanagerconnectorsphputil.php 文件

找到 ConvertToXmlAttribute 函数:

将:return ( utf8_encode( htmlspecialchars( $value ) ) ) ;

修改为:return iconv("GBK", "UTF-8", htmlspecialchars( $value ));

==>第二个思路,修改上传文件的名字:

需要修改如下:

在 .fckeditoreditorfilemanagerconnectorsphpcommands.php 文件中

找到 FileUpload 函数:将 $sFileName = $oFile['name'];

修改如下:

//--------------------------------------------------------------
   //修正上传文件中文乱码方法之二:(修改上传文件的名字)
   $sFileName = "sda.php";
   $sOriginalFileName = $sFileName;
   $sExtension = substr($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
   $sExtension = strtolower($sExtension);
   $sFileName = date("YmdHis").rand(100, 200).".".$sExtension;
//--------------------------------------------------------------

个人认为第一种方法还是蛮好的!

 


java版

在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:
问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
  把SimpleUploaderServlet.java做如下修改:
  找到该程序中DiskFileUpload upload = new DiskFileUpload(),然后在该行下面添加
  upload.setHeaderEncoding("UTF-8")
问题2:
  当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
  和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
  当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用Create New Folder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
  web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改
tomcat服务器中conf目录下的server.xml。如下: 
 

<Connector port="8080" maxHttpHeaderSize="8192"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups教程="false" redirectPort="8443" acceptCount="100"
              connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
    <Connector port="8009"
              enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="utf-8"/>

其实就是在原来的基础上添加URIEncoding的属性值为utf-8。

在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:
问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
   找到FCKeditor.java解压包中的src目录下SimpleUploaderServlet.java做如下修改:
   找到该程序中DiskFileUpload upload = new DiskFileUpload(),然后在该行下面添加
upload.setHeaderEncoding("UTF-8"),重新编译成class文件并利用WinRAR把该class文件
添加到FCKeditor-2.3.jar中相应的位置,然后覆盖你的web项目中原来的jar包便可。
问题2:
   当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
   和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
   当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用Create New Folder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
   web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改
tomcat服务器中conf目录下的server.xml。如下:
  

<Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
    <Connector port="8009"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="utf-8"/>

其实就是在原来的基础上添加URIEncoding的属性值为utf-8。
 注:对于问题3,这种解决办法不可取,最好不要去修改服务器的编码,否则会影响到服务器上其它的工程。解决这个编码的问题可以修改源代码或者从新编写一个类来处理。通过观察打开的上传浏览对话框可以找对对应的htm页面和负责处理上传文件名称的com.fredck.FCKeditor.uploader. ConnectorServlet这个类,然后找到对应的参数,转换编码便可。如:String

newFolderStr=request.getParameter("NewFolderName");

newFolderStr=new String(newFolderStr.getBytes("iso8859-1"),"utf-8");
=================================================================================

fckeditor如果大家搞定啦1!那一定想到他是没有提供删除功能的!!
以下是一段js,放在调用feckeditor的jsp教程页面
function FCKeditor_OnComplete( editorInstance )
{
editorInstance.Events.AttachEvent( 'OnBlur', onEditorBlur );
}

function onEditorBlur(){
var imgs = FCKeditorAPI.GetInstance('EditorDefault').EditorDocument.body.all.tags("img");
for(var i=0; i < imgs.length; i++){
alert(imgs[i].src);

//这里你可以用一个隐匿域来接收这些路径信息
}
}
把这些路径信息放置于数据库教程是的一个字段,删除文档时一起删除,就可以解决图片存留问题
========================================================================================
避免上下滚动条的出现:


在fckconfig.js中加入下列2句:

FCKConfig.Plugins.Add(   'autogrow '   )   ;
FCKConfig.AutoGrowMax   =   4000   ;   //这是允许自动增长的最大高度限制

同时请确认fckeditoreditorpluginsautogrow有这个目录存在,没有的话到官网下载最新版FCK。


另外注意FCKConfig.PluginsPath的路径你设置对了没有。
===========================================================================

FCKConfig.PluginsPath   =   FCKConfig.BasePath   +   'plugins/ '   ;

这个是对的,系统默认的路径,FCK使用也没问题

就是不能自动调整高度
=============================================================================

FCKConfig.PluginsPath   =   FCKConfig.BasePath   +   'plugins/ '   ;


这是js里的语句。BasePath不是在这设的,是在php里调用FCK时设置的。

========================================================================
不行的话是不是你曾经改过FCK的源码。
你重新下载文件,只改动这2行测试一下就知道了。别的什么都不用改就可以实现你所说的要求。

FCKConfig.Plugins.Add(   'autogrow '   )   ;
FCKConfig.AutoGrowMax   =   4000   ;

 

问题二

FCKeditor中文乱码问题

在FCKeditor的使用中,主要有在3个地方会出现中文乱码:

① 在“浏览服务器”页面中创建新目录时

问题:当点击“插入/编辑图象”或“插入/编辑Flash”时,会弹出“图象属性”或“Flash属性”对话框,然后单击其中的“浏览服务器”按钮时,会打开“浏览服务器”的页面,在这个页面中创建中文名目录时会出现乱码。

解决:修改Web容器的字符编码。因为FCKeditor的默认字符编码是UTF-8,所以将Web容器的字符编码也修改成UTF-8。如果Web容器用的是Tomcat,打开文件%CATALINA_HOME%/conf/server.xml,修改如下:

<Connector  
    port="8080"  
    redirectPort="8443"  
    minSpareThreads="25"  
    connectionTimeout="60000"  
    connectionLinger="-1"  
    serverSoTimeout="0"  
    maxSpareThreads="75"  
    maxThreads="150"  
    tcpNoDelay="true"  
    maxHttpHeaderSize="8192"  
IEncoding="UTF-8">  
</Connector>  
<Connector  
    port="8009"  
    redirectPort="8443"  
    protocol="AJP/1.3"  
IEncoding="UTF-8">  
</Connector>  
 

② 在“浏览服务器”页面中上传文件时

问题:在和①同样的方式打开的“浏览服务器”页面中上传中文名的文件时会出现乱码。

解决:打开项目WebRoot中的文件/editor/filemanager/browser/default/frmupload.html,在head中加一个meta:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
③ 在“图象属性”或“Flash属性”对话框中上传文件时

问题:当点击“插入/编辑图象”或“插入/编辑Flash”时,会弹出“图象属性”或“Flash属性”对话框,点击其中的“上传”选项卡,点击“浏览...”按钮,选择一个中文名的文件,再点击“发送到服务器上”按钮,上传后的文件名是乱码。

解决:修改FCKeditor.Java源代码。通过Eclipse修改源码然后重新打包成jar文件比较方便。在Eclipse里新建Web工程FCKeditor-java-2.3,这里要注意,因为FCKeditor.Java的WebRoot目录名是web,所以建议新建工程时,WebRoot目录名也命名为web。把FCKeditor.Java里的相应目录复制到工程下。在src里找到ConnectorServlet.java和SimpleUploaderServlet.java两个文件,分别在两个文件中找到DiskFileUpload upload = new DiskFileUpload();,在其后加入upload.setHeaderEncoding("utf-8");。然后把Tomcat安装目录下/server/lib里的catalina-ant.jar复制到项目的/WEB-INF/lib下。打开build.xml,修改property name="catalina.home"成Tomcat的安装目录。修改taskdef name="deploy"、taskdef name="list"、taskdef name="reload"、taskdef name="undeploy"如下:

<

taskdef name="deploy"   classname="org.apache.catalina.ant.DeployTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="list"     classname="org.apache.catalina.ant.ListTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="reload"   classname="org.apache.catalina.ant.ReloadTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  

然后在Eclipse的Outline窗口中运行Ant的dist,就会生成的新的FCKeditor-2.3.jar。将使用了FCKeditor的项目中的FCKeditor-2.3.jar替换成这个新的。

上传失败问题

这里不考虑服务器方的原因。首先检查web.xml中SimpleUploader这个Servlet的配置里,是否把参数enabled设为了false。

另外,FCKeditor会自动创建web.xml中SimpleUploader的参数baseDir指定的目录。当通过“浏览服务器”页面上传文件时,如果baseDir下没有相应的Image或Flash目录,FCKeditor会自动创建Image或Flash目录;但是当通过“上传”选项卡中的“发送到服务器上”按钮上传文件时,如果baseDir下没有相应的Image或Flash目录,FCKeditor就会报错,这时需要你手动在baseDir下新建Image或Flash目


总结,不管是jsp,php,asp教程.net出问题我们都需要分析如下

是的,是中文编码问题,有两个办法可以解决
都需要改fck的相应文件源代码
1 把中文名的字符串转换编码

2 重命名文件名为英文加数字


那个文件名我现在没有看代码忘了,而且版本不同好像略有差别,你研究一下应该可以找出来的

找开config.inc.php教程

一、使用cookie授权模式 将'auth_type'改为'cookie',然后修改'blowfish_secret'用一个任意字符串作为cookie的加密字符串,如果没有加密钥匙,系统会显示"配置文件现在需要绝密的短语密码(blowfish_secret) " ,配置文件如下: $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['blowfish_secret'] = '44e2f5aece2855.93921574'; 修改完毕后,登录窗口入下
4
http授权模式的web登陆页面

二、使用config授权模式
   config需要这几个参数:
$cfg['Servers'][$i]['auth_type'] = 'config';  
//授权模式 $cfg['Servers'][$i]['user'] = 'root';        
//mysql教程登陆用户 $cfg['Servers'][$i]['password'] = '12345';   
//mysql登陆用户密码

将config.inc中,改成
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
注意,不是http 而是 cookie 哦!!!

三、用http授权模式
$cfg['Servers'][$i]['auth_type'] = 'http';

http授权模式的登陆窗口
注意事项:如果mysql服务器端采用了4.1以上版本,而客户端连接用的是mysql4.1一下版本,对用户设置密码时注意使用OLD_PASSWORD函数,举例:
mysql > SET PASSWORD = OLD_PASSWORD('12345')
mysql > /G
附录:(以下内容是自己写的)除了上述三种phpmyadmin自带的方法外,还可以使用apache的配置来限制登录,在phpmyadmin目录下放置一个.htaccess文件,指定使用的密码记录文 件。然后用htpasswd来生成密码保存在该密码记录文件中(文件的内容是加密的,使用方法htpasswd /etc/php_passwd username)。
    httpd.conf中的内容:phpmyadmin's directory"> AllowOverride AuthConfig
.htaccess文件的内容
authtype basic authuserfile /etc/php_passwd authname information require valid-user
我们可以看到/etc/php_passwd文件中的内容类似这样:
username:2Y2CD6nfJuwL6


更详细的教程

 打开phpMyAdmin中libraries文件找到config.default.php并打开.

  找到$cfg['servers'][$i]['user'] = ' ',在' '中加入'root'

  找到$cfg['servers'][$i]['password'] = ' ',在' '中加入'123456';

  这两个地方的修改就是加入刚才安装的Mysql的用户名和密码,读者可自行修改.

 
这个是配置文件也要修改一下。
config.inc.php

<?php

/* $Id: config.sample.inc.php 9689 2006-11-10 20:05:49Z nijel $ */
// vim: expandtab sw=4 ts=4 sts=4:

/**
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use scripts/setup.php
*
* All directives are explained in Documentation.html and on phpMyAdmin
* wiki <http://wiki.cihar.com>.
*/

/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = 'afafafaf'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/*
* Servers configuration
*/
$i = 0;

/*
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = ''; //用户名
$cfg['Servers'][$i]['controlpass'] = '';//密码
/* Advanced phpMyAdmin features */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma_relation';
// $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
// $cfg['Servers'][$i]['history'] = 'pma_history';
// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';

/*
* End of servers configuration
*/

/*
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

?>

php教程中解决各种应用的乱码问题

  1) 使用 标签设置页面编码

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

  请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

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

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

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

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

  3) AddDefaultCharset

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

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

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

  下面列出以上的优先顺序:

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

  .. AddDefaultCharset xxx

  ..

  如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。

  4) php.ini 中的 default_charset 配置:

  php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

在很多时间使用了session就会出来如下提示了,

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/u114264/include/db_mysql教程.class.php教程:1) in /home/u114264/login1.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/u114264/include/db_mysql.class.php:1) in /home/u114264/login1.php on line 3

分析最大的可能是在session_start()前面有字符输出包括空格 ,只要处理就好了,

还有一种方法直接给session_start()加上@session_start()就没事了。不推荐

地址解决方案。


最通常的解决方案。打开output_buffering = 4096;  全局性质。

 

第二种解决方案。


ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
 

注意的地方:


如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。

[!--infotagslink--]

相关文章

  • C# 10个常用特性汇总

    这篇文章主要介绍了C# 10个常用特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-09
  • c#的异或运算符介绍

    这篇文章介绍了c#的异或运算符,有需要的朋友可以参考一下...2020-06-25
  • 轻松学习C#的运算符

    轻松学习C#的运算符,对C#的运算符感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的运算符。...2020-06-25
  • C#中38个常用运算符的优先级的划分和理解

    这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享...2020-06-25
  • R语言运算符知识点讲解

    在本篇文章里小编给大家分享了一篇关于R语言运算符知识点讲解内容,有兴趣的朋友们可以参考下。...2021-05-06
  • C++编程中的或||、与&&、非!逻辑运算符基本用法整理

    这篇文章主要介绍了C++中的或||、与&&、非!逻辑运算符基本用法整理,是C++入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • JS不要再到处使用绝对等于运算符了

    这篇文章主要介绍了JS不要再到处使用绝对等于运算符了,对此感兴趣的同学,可以参考下...2021-05-01
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • C#运算符重载用法实例分析

    这篇文章主要介绍了C#运算符重载用法,实例分析了C#中运算符重载的基本实现与使用技巧,需要的朋友可以参考下...2020-06-25
  • C# 常见操作符整理

    操作符接受一个或多个参数,并生成一个新值。操作符其实可以看做一个有返回值方法,但是参数的形式和调用和普通的调用不同。...2020-06-25
  • MongoDB操作符中的$elemMatch问题

    这篇文章主要介绍了MongoDB操作符中的$elemMatch问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • C++中运算符 &和&&、|和|| 的详解及区别

    这篇文章主要介绍了C++中运算符 &和&&、|和|| 的详解及区别的相关资料,这里举例说明该如何区别他们的不同,需要的朋友可以参考下...2020-04-25
  • PHP的三种类型的运算符

    在php中运算符有常用的三种了如有一元运算符,二元运算符,三元运算符了,下面来简单的介绍一下吧。 运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生...2016-11-25
  • C#中的除法运算符与VB.NET中的除法运算符

    这篇文章主要介绍了C#中的除法运算符与VB.NET中的除法运算符,需要的朋友可以参考下...2020-06-25
  • C语言中逻辑运算符与条件运算符的学习教程

    这篇文章主要介绍了C语言中逻辑运算符与条件运算符的学习教程,条件运算符问号即三目运算符使用起来十分方便,需要的朋友可以参考下...2020-04-25
  • 详解php常用数组函数实例

    这篇文章介绍了php中常用的数组与函数,非常具有价值,有兴趣的同学可以参考一下 本文实例总结了php常用数组函数。分享给大家供大家参考,具体如下: 1. array array_mer...2016-12-31
  • C# null 合并运算符??(双问号)使用示例

    这篇文章主要介绍了C# null 合并运算符??(双问号)使用示例,?? 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数,需要的朋友可以参考下...2020-06-25
  • PHP编程常用技巧四则

    PHP编程常用技巧四则:   1.配置PHP文件目录   作为服务器端解释执行的脚本语言,PHP程序放置在某个服务器可以访问的目录下,一般可以通过修改Apache的httpd.conj...2016-11-25
  • 一篇文章带你入门java算术运算符(加减乘除余,字符连接)

    这篇文章主要介绍了Java基本数据类型和运算符,结合实例形式详细分析了java基本数据类型、数据类型转换、算术运算符、逻辑运算符等相关原理与操作技巧,需要的朋友可以参考下...2021-08-05
  • 常用的css hack简单写法与兼容性介绍

    本文章来收藏了大量的关于在css中hack的用法及在不同浏览器下hack语法写法,有需要了解的朋友可参考一下。 区别不同浏览器的CSS hack写法: 区别IE6与FF: b...2017-07-06