PHPer使用UTF-8注意事项

 更新时间:2016年11月25日 16:09  点击:1437



本文的作用是为了全方位的避免因使用UTF-8编码而产生的乱码问题,不包含具体的乱码解决方案和编码转换的内容。对于UTF-8编码的深入了解,请参阅:《PHP匹配UTF-8中文字符的正则表达式》
1、编辑器:不要使用任何微软的编辑器,什么Frontpage,Web Designer,记事本,写字板什么的,能丢的全部丢开,因为这些编辑器会在你的UTF-8文档前面产生BOM,关于BOM的具体说明,可以在 这里找到,当年我直接拿记事本转UTF-8覆盖原文件,造成大量代码损毁,至今记忆犹新。
2、MySQL数据库:注意建库,建表,建字段(注意有三处)的时候,都要选用utf8_general_ci的整理格式(Collation),在PHP使用mysql_connect()函数连接数据之后,需要加上一句:
mysql_query(''set names "utf8"'');

3、PHP:
使用mbstring库,不要使用iconv库。
使用preg而不要使用ereg来处理字符。
使用htmlentities()函数,html_entity_decode()函数的时候要带上第三个参数:
CODE:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
&lt;?php
$str = "<a href=''test''>中文</a>";
echo htmlentities($str,ENT_COMPAT,"UTF-8"); //显示(源代码里面) <a href=''test''>涓?

我程序里要用到PHP连接到MYSQL,所以先要将已经复制到c:windows 下的 php.ini 中看看。

将 extension=php_mysql.dll 前面的 ; 分号给去掉.

phpexe php_mysql.dll  的文件, 也复制到 c:windows, 或者是 path 路径中已经设置好的地方。

然后。可以用下面的一段代码来测试下,是否正常连接了。

  本机环境: mysql-4.1.22-win32

MYSQL : root 口令123

数据库:deepthroat

能正常显示了,那就OK



<?php
// 连接,选择数据库
$link = mysql_connect(''localhost'', ''root'', ''123'')
    or 
die(''Could not connect: '' . mysql_error());
echo ''Connected successfully'';
mysql_select_db(''deepthroat'') or die(''Could not select database'');

// 执行 SQL 查询
$query = ''SELECT * FROM dt_menu'';
$result = mysql_query($query) or die(''Query failed: '' . mysql_error());

// 用 HTML 显示结果
echo "<table> ";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    
echo " <tr> ";
    
foreach ($line as $col_value) {
        
echo " <td>$col_value</td> ";
    }
    
echo " </tr> ";
}
echo "</table> ";

// 释放结果集
mysql_free_result($result);

// 关闭连接
mysql_close($link);
?> 


<


  说起PHP近几年的发展,可以说是突飞猛进。EDC在2006年的统计信息表明PHP已经跻身全球三个编程语言的行列,并且其是以Web脚本语言的身份参与竞争的。其它两个语言(Java和.net)都是通用的语言(可以开发多种应用)。但是,令人难以置信的是,PHP目前的发展速度是37%明显高于其它两种语言。

  同时在国内,PHP的发展也非常迅速。目前在各大网站云集的北京,PHP几乎是无处不在。百度、新浪、搜狐、TOM等等各大互联网门户都在广泛使用这PHP。同时,近两年来北京多处许多小型的门户站点,也是大部分使用了PHP的技术。就连PHP的工程师需求量都发幅度提高。PHP在国内的官方PHPChina.com网站透露,目前的在京PHP工程师的待遇的平均值可以比ASP工程师的高出一倍。

  那么,为什么PHP可以在近年来发展如此迅速呢。其实跟Web的迅猛发展是紧密联系在一起的。另外,LAMP的迅速发展使得PHP的应用也更加广泛了。那么这里我就Web迅猛发展这个大的环境,和大家下为什么PHP能在把握住这个机会,一举成功。

  总结起来,PHP能发展起来有三个原因:

  ·基于Web量身定制,Web语言的首选,LAMP架构安全稳定

  ·简单,开发快速,扩展性强

  ·PHP企业级应用的发展

  基于Web量身定制,Web语言的首选,安全稳定

  在参加今年的LAMP大会的时候,我看到了PHP的创始人之一,Zeev Suraski。也听取了他在为我们做的PHP的整体介绍的报告。在听他讲当初开发PHP的初衷的时候他说到,他和Andi就是需要一个非常适合于Web 的语言来编写一个课题,于是他们就找到了最好的PHP/HI。在他们完成项目的同时,他们发现PHP/HI非常有技术前景,于是他们就加入了PHP的研发,后来又一起开发了Zend Engine,并免费嵌入到PHP当中,发布了PHP4从而让PHP真正发展起来。

  我们可以发现,再后来PHP一些列的版本升级中,PHP一直围绕着Web来增加它的特性,这点对于准备长期使用PHP来作为网站的技术承载平台的公司来说是非常合适的。关于这点Zeev本人也表示在PHP5确定版本的时候不得不把一些很不错的功能去掉,就是为了延续PHP的稳定的特点。

  曾经听一个网站的技术经理说过:“如果做软件,如果要做网站就用PHP!”。当时我们都以为这个是一个笑谈,现在想起来还真是这样。目前,许多的网站项目的负责人都很信任PHP。觉得PHP在支持Web方面非常到位。

  关于PHP应用的安全,则得益于PHP是开源的。在PHP社区有500多个PHP编写工程师在支持着PHP,源代码的公布为它赢得广泛的支持。当然,在讲到PHP的安全性的时候,不能不提到LAMP架构。基于LAMP平台的稳定性从它在国内各大网站的服务器的使用量就可以得以证明。

  简单,开发快速,扩展性强

  2006LAMP大会的时候,我发现Zeev在谈到PHP的特性的时候第一个就谈到使用简单。而且强调了这就是PHP能够成功的原因。而且 Zeev也强掉了PHP将保持简单的风格,以便用户可以方便快捷地开发PHP应用程序。据说,美国上次受的飓风袭击的时候,特意为此搭建的网站就是用 PHP的,一共才用了3天。虽然这个时间看上去很短,但是经过我们仔细分析以后,也是有可能的。

  我个人认为不单单是国外,国内也是这样的。个人认为,简单带来的好处就是企业的快速成长的必备条件。用PHP来做Web站点可以在非常短的时间内搭建起一个小规模的网站。因此造就了大批的“个人站长”。同时,在国内也诞生了不少以PHP

  另外,PHP的扩展性也非常好,如果用PHP开发产品的话,可以非常快地根据客户的需求进行定制。而且在PHP广泛的社区里面,可以为PHP的开发工程师提供大量的资源支持。PHP的开发工程师可以很快地获取他所需要的项目、方案或者具体的功能代码。在这点上,许多建站的产品的推广企业也有很深的感受。例如,论坛、CMS还有在线购物等等。

  PHP企业级应用的发展

  众所周知,PHP历来被认为是草根阶层的变成语言。因此困扰PHP发展的很大因素就是大企业的认可。政府、大企业等PHP项目的增加在近几年的表现也是很突出的,这点可能在国外比较明显,它大幅度地提高了大家在选择PHP时候的信心。

  从这两年全球的PHP年会来看,许多的大厂商都开始纷纷关注PHP,参加年会。甚至于像IBM、Oracle等公司直接与Zend公司进行合作,推广并提高PHP在大型项目里面的功能。IBM公司本身也来大量采用PHP来实现它的项目。

  此外,直接一提的是,大型的项目考虑开源的LAMP架构的时候会很看重是否可以获得一些技术支持。而关于PHP的技术支持,还是应该关注它的创始公司Zend 技术公司。Zend公司确实在把PHP推向企业级应用方面做了许多工作。  

制作网站时,经常会遇到检索数据列表的情况。通常用户希望下载这些列表数据并存储到客户端。当然下载这些数据的时候是需要固定的格式,以便于用Excel等软件阅览。说的简单一些就是CSV/Excel数据导出 。

注意事项:

输出文档的基本格式为:列1,列2,列3,……,列nn

格式化数据的同时要对特殊的字符进行过滤。譬如“,”如果不转换为全角“,”会导致数据格式的混乱。

实现方法:

举例:检索数据库表,将结果保存为字符串,进行格式和特殊字符的过滤后,导出到客户端的CSV文件。 

OrderSearchEdit_saveCSV.php



<?php
include($_SERVER[''DOCUMENT_ROOT''. "/ftcart/OrderInfoManager.class.php");
include($_SERVER[''DOCUMENT_ROOT''. "/ftcart/CommonUtil.php");
include($_SERVER[''DOCUMENT_ROOT''. "/ftcart/CommonConst.php");
include($_SERVER[''DOCUMENT_ROOT''. "/ftcart/CommonErrorMsg.php");
include($_SERVER[''DOCUMENT_ROOT''. "/webadmin.php");

$searchcase = new OrderInfoManager();
$nowTime = microtime_float();
$searchcase = unserialize($_SESSION["ORDER_SEARCH_CASE"]);
$listcsv = $searchcase->doCSV();// 调用doCSV()方法
$filename = $nowTime;
//$filename = str_replace(":","",$nowTime);
//$filename = trim($filename);
//echo $filename;

header("Content-Disposition: attachment; filename=".$filename.".csv");
header(''Content-Type:APPLICATION/OCTET-STREAM'');
echo "注文No.,注文日,氏名,住所,支


当表单按提交后经过浏览器初步处理之后,传到php表单处理页面。
    一般的书上都讲的要么是自动为表单元素分配变量;要么就是将提交的数据保存在全局数组中,然后调用系统特定的自动全局变量数组来获取这些值。看了很久没有明白php到底是如何和浏览器进行信息沟通的,也就是B(客户端)发送数据,到S(服务器)的php表单处理页面,接着就产生相应的变量,这中间php工作机理,哪位老大清楚啊!一直没有明白!

SyntaxHighlighter.highlight();

[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • 使用jquery修改表单的提交地址基本思路

    基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • 总结android studio注意事项及打不开等问题解决方法

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

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • 双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08