UTF8Unicode的一种可变长度字符编码,通常在开启PHP动态网站的时候什么默认的?

PHP 是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些 bug。 每个版本都有自己独有的特性、多余和怪异之处,也很难跟踪哪个版本有哪些问题。 这也就很好理解为什么有时它会遭到那么多的厌恶。

尽管如此,如今它还是 Web 开发方面最流行的语言。 因其悠久的历史,对于实现密码哈希和数据库访问诸如此类的基本任务你能够找到很多教程。 但问题在于,5 个教程,你就很有可能找到 5 种完全不同的完成任务的方式,那么哪种是「正确」的方式呢? 其他方式有难以捉摸的 bug 或者陷阱? 确实很难搞明白,所以你经常要在互联网上反复查找尝试确认正确的答案。

这也是 PHP 编程新手频繁地因为丑陋、过时、或不安全的代码而遭到责备的原因之一。 如果 Google 搜索的第一个结果是一篇 4 年前的文章,讲述一种 5 年前的方法,那么 PHP 新手们也就很难改变经常遭受责备的现状。

本文档通过为 PHP 中常见的令人困惑的问题和任务编辑组织一系列被认为最佳实践的基本做法, 来尝试解决上述问题。 若一个低层次的任务在PHP中有多种令人困惑的实现方式,本文也会涵盖。

这是一份指南,在 PHP 程序员遇到一些常见低层次任务但不明确最佳做法(由于 PHP 可能提供了多种解决方案)之时,为其建议最佳实践。 例如:连接数据库是一个常见任务,PHP 中提供了大量可行的方案,但并不是所有的都是好的做法,因此,本文也会包含该问题。

本文包含的是一系列简短的、入门性质的方案。 涉及的示例在基本设定下就能够运行起来,你研究一下应该就能把它们变为对你有用的东西。

本文将指出一些我们认为是 PHP 中最新最好的东西。然而,这意味如果你在使用老版本的 PHP, 一些用来实现这些解决方案的特性对你并不可用。

这份文档会一直更新,我会尽我最大努力保持该文档与 PHP 的发展同步。

本文档不是一份 PHP 教程。你应该在别处学习语言基础和语法。

它也不是一份针对 web 应用常见问题,如 cookie 存储、缓存、编程风格、文档等的指南。

它也不是一个安全指南。当本文档触碰到一些安全相关的问题时,也是希望你自己做些研究来确保你的 PHP 应用的安全问题。 你的代码造成的问题应该都是自己的过错。

该文档也并不是在主张一种特定的编程风格、模式或者框架。

也不是在主张一种特定的方式来完成高层次任务如用户注册、登录系统等。 本文档只限于 PHP 的悠久历史所造成的一些易混淆或不明确的低层次任务。

它不是一个一劳永逸的解决方案,也不是一个唯一的方案。 下面要讲述的一些方法对于你的特定场景来说也许并不是最好的,存在很多不同的方式来达到同样的目的。 特别是,高负载 web 应用也许能从更加难懂的方案中获益更多。

我们在使用哪个版本的 PHP?

  • PHP 手册:过滤器的类型

邮件地址验证也可以交给前端解决。HTML 5 的 表单即支持验证邮箱地址。只需将input元素的type设为email,就会自动验证用户输入的是否是合法的邮件地址。

净化 HTML 输入和输出

在任何 wbe 应用中展示用户输出时,首先对其进行“净化”去除任何潜在危险的 HTML 是非常必要的。 一个恶意的用户可以制作某些 HTML,若被你的 web 应用直接输出,对查看它的人来说会很危险。

虽然可以尝试使用正则表达式来净化 HTML,但不要这样做。HTML是一种复杂的语言,试图使用正则表达式来净化 HTML 几乎总是失败的。

你可能会找到建议你使用 strip_tags() 函数的观点。 虽然 strip_tags() 从技术上来说是安全的,但如果输入的不合法的 HTML(比如, 没有结束标签),它就成了一个「愚蠢」的函数,可能会去除比你期望的更多的内容。 由于非技术用户在通信中经常使用 <> 字符,strip_tags() 也就不是一个好的选择了。

如果阅读了验证邮件地址一节, 你也许也会考虑使用 filter_var() 函数。 然而 filter_var() 函数在遇到断行时会出现问题, 并且需要不直观的配置以接近 htmlentities() 函数的效果, 因此也不是一个好的选择。

如果你的 web 应用仅需要完全地转义(因此可以无害地呈现,但不是完全去除) HTML, 则使用 PHP 的内建 htmlentities() 函数。 这个函数要比 HTML Purifier 快得多,因此它不对 HTML 做任何验证—仅转义所有东西。

对于很多 web 应用来说,简单地转义 HTML 是不够的。 你可能想完全去除任何HTML,或者允许一小部分子集的 HTML 存在。 若是如此,则使用 HTML Purifier 库。

HTML Purifier 是一个经过充分测试但效率比较低的库。 这就是为什么如果你的需求并不复杂就应使用 htmlentities(), 因为它的效率要快得多。

但其缺点就是相当的慢,它要求一些设置,在一个共享主机的环境里可能是不可行的。 其文档通常也复杂而不易理解。 以下示例是一个基本的使用配置。 查看文档阅读 HTML Purifier 提供的更多更高级的特性。

  • 以错误的字符编码使用 htmlentities() 会造成意想不到的输出。 在调用该函数时始终确认指定了一种字符编码,并且该编码与将被净化的字符串的编码相匹配。 更多细节请查看 UTF-8 一节。
  • HTML Purifier 对于复杂的 HTML 效率极其的低。可以考虑设置一个缓存方案如APC来保存经过净化的结果以备后用。
  • PHP HTML 净化工具对比(英文)

没有一行式解决方案。小心、注意细节,以及一致性。

PHP 中的 UTF-8 糟透了。原谅我的用词。

目前 PHP 在低层次上还不支持 Unicode。有几种方式可以确保 UTF-8 字符串能够被正确处理, 但并不容易,需要深入到 web 应用的所有层面,从 HTML,到 SQL,到 PHP。我们旨在提供一个简洁、 实用的概述。

基本的字符串操作,如串接 两个字符串、将字符串赋给变量,并不需要任何针对 UTF-8 的特殊东西。 然而,多数 字符串函数,如 strpos() 和 strlen,就需要特殊的考虑。 这些函数都有一个对应的 mb_* 函数:例如,mb_strpos() 和 mb_strlen()。 这些对应的函数统称为多字节字符串函数。 这些多字节字符串函数是专门为操作

当你操作 Unicode 字符串时,必须使用 mb_* 函数。 例如,如果你使用 substr() 操作一个 UTF-8 字符串,其结果就很可能包含一些乱码。 正确的函数应该是对应的多字节函数, mb_substr()。

难的是始终记得使用 mb_* 函数。即使你仅一次忘了,你的 Unicode 字符串在接下来的处理中就可能产生乱码。

并不是所有的字符串函数都有一个对应的 mb_*。如果不存在你想要的那一个,那你就只能自认倒霉了。

此外,在每个 PHP 脚本的顶部(或者在全局包含脚本的顶部)你都应使用 mb_internal_encoding 函数,如果你的脚本会输出到浏览器,那么还得紧跟其后加个mb_http_output() 函数。在每个脚本中显式地定义字符串的编码在以后能为你减少很多令人头疼的事情。

最后,许多操作字符串的 PHP 函数都有一个可选参数让你指定字符编码。 若有该选项, 你应始终显式地指明 UTF-8 编码。 例如,htmlentities() 就有一个字符编码方式选项,在处理这样的字符串时应始终指定 UTF-8。

如果你的 PHP 脚本会访问 MySQL,即使你遵从了前述的注意事项,你的字符串也有可能在数据库中存储为非 UTF-8 字符串。

确保从 PHP 到 MySQL 的字符串为 UTF-8 编码的,确保你的数据库以及数据表均设置为 utf8mb4 字符集, 并且在你的数据库中执行任何其他查询之前先执行 MySQL 查询 `set names utf8mb4`。这是至关重要的。 示例请查看连接并查询 MySQL 数据库一节内容。

注意你必须使用 `utf8mb4` 字符集来获得完整的 UTF-8 支持,而不是 `utf8` 字符集!原因请查看进一步阅读。

  • PHP 手册:多字节字符串函数

在 PHP 糟糕的老时光里,我们必须使用 date(), gmdate(), date_timezone_set(), strtotime()等等令人迷惑的 组合来处理日期和时间。悲哀的是现在你仍旧会找到很多在线教程在讲述这些不易使用的老式函数。

幸运的是,我们正在讨论的 PHP 版本包含友好得多的 DateTime 类。 该类封装了老式日期函数所有功能,甚至更多,在一个易于使用的类中,并且使得时区转换更加容易。 在PHP中始终使用 DateTime 类来创建,比较,改变以及展示日期。

  • 如果你不指定一个时区,DateTime::__construct() 就会将生成日期的时区设置为正在运行的计算机的时区。之后,这会导致大量令人头疼的事情。 在创建新日期时始终指定 UTC 时区,除非你确实清楚自己在做的事情。
  • 向 DateTime::__construct() 传递零值日期(如:“”,常见 MySQL 生成该值作为 DateTime 类型数据列的默认值)会产生一个无意义的日期,而不是“”。

PHP 宽松的类型系统提供了许多不同的方法来检测一个变量的值。 然而这也造成了很多问题。 使用 == 来检测一个值是否为 null 或 false,如果该值实际上是一个空字符串或 0,也会误报为 false。 isset 是检测一个变量是否有值, 而不是检测该值是否为 null 或 false,因此在这里使用是不恰当的。

is_null() 函数能准确地检测一个值是否为 null, is_bool 可以检测一个值是否是布尔值(比如 false), 但存在一个更好的选择:=== 操作符。=== 检测两个值是否同一, 这不同于 PHP 宽松类型世界里的 相等。它也比 is_null() 和 is_bool() 要快一些,并且有些人认为这比使用函数来做比较更干净些。

  • 测试一个返回 0 或布尔 false 的函数的返回值时,如 strpos(),始终使用 ===!==,否则你就会碰到问题。
  • PHP 手册:比较操作符

以上是 的全部内容, 来源链接:

    合并css、js文件,集成CSS图片
    压缩技术:压缩css、js文件,优化图像,减少cookie体积;
    合理利用缓存:使用外部js/css文件,缓存ajax;
    减少不必要的通信量:剔除无用脚本和样式、推迟加载内容、使用GET请求
    c) 合理利用“并行” 尽量避免重定向
    慎用Iframe 样式表置于顶部 脚本放到样式后面加载
    避免CSS表达式、滤镜
  1. yahoo的34条前端优化法则
    减少HTTP请求、利用CDN技术、 设置头文件过期或者静态缓存、Gzip压缩、把CSS放顶部、 把JS放底部、避免CSS 表达式、将JS和CSS外链、减少DNS查找、减小JS和CSS的体积、 避免重定向、删除重复脚本、 配置ETags、缓存Ajax、尽早的释放缓冲、
    用GET方式进行AJAX请求、延迟加载组件、 预加载组件、减少DOM元素数量、跨域分离组件、
    减少iframe数量、不要出现404页面、减小Cookie、 对组件使用无Cookie的域名、减少DOM的访问次数、开发灵活的事件处理句柄、使用< link >而非@import、避免过滤器的使用、优化图片、优化CSS Sprites、 不要在HTML中缩放图片、缩小favicon. ico的大小并缓存它、保证组件在25K以下、将组件打煲进一个多部分的文档中

  2. 数据库缓存的基本理论,参考memcached
    memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
    虽然memcached 使用了同样的“Key=>Value”方式组织数据,但是它和共享内存、APC等本地缓存有非常大的区别。Memcached是分布式的,也就是说 它不是本地的。它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式)
    Memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和
    基于反向代理的Web缓存;
    基于反向代理的Web缓存

  3. 启用safe_mode指令将对在共享环境中使用PHP时可能有危险的语言特性有所限制。可以将safe_mode是指为布尔值on来启用,或者设置为off和脚本尝试访问的文件的UID,以此作为限制机制的基础。如果UID相同,则知性脚本;否则,脚本失败。
    当启用安全模式时,一些限制将生效
    1、 所有输入输出函数(例如fopen()、file()和require())的适用会受到限制,只能用于与调用这些函数的
    脚本有相同拥有者的文件
    配置指令指定的目录才可能
    3、 3、HTTP验证得到进一步加强,因为验证脚本用于者的UID划入验证领域范围内。此外,当启用安
    全模式时,不会设置PHP_AUTH。
    4、 4、如果适用MySQL数据库服务器,链接MySQL服务器所用的用户名必须与调用mysql_connect()
    的文件拥有者用户名相同。
    以下是一些和安全模式相关的配置选项

  4. XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊 目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。但是随着前端技术的不断进步富客户端的应用越来越多,这方面的问题越来 越受关注。举个简单例子 : 假如你现在是sns站点上一个用户,发布信息的功能存在漏洞可以执行js 你在 此刻输入一个 恶意脚本,那么当前所有看到你新信息的人的浏览器都会执行这个脚本弹出提示框 (很爽吧 弹出广告 :)),如果你做一些更为激进行为呢 后果难以想象。
    CSRF(Cross Site Request Forgery),跨站点伪造请求。顾名思义就是 通过伪造连接请求在用户不知情的情况下,让用户以自己的身份来完成攻击者需要达到的一些目的。csrf 的攻击不同于xss csrf 需要被攻击者的主动行为触发。这样听来似乎是有“被钓鱼”的嫌疑。
    多窗口浏览器这这方面似乎是有助纣为虐的嫌疑,因为打开的新窗口是具有当前所有 会话的,如果是单浏览器窗口类似ie6 就不会存在这样的问题,因为每个窗口都是一个独立的进程。举个简单例子 : 你正在玩白社会, 看到有人发了一个连接,你点击过去,然后这个连接里面伪造了一个送礼物的表单,这仅仅是一个简单的例子,问题可见一般。
    cookie劫持。通过获取页面的权限,在页面中写一个简单的到恶意站点的请 求,并携带用户的cookie 获取cookie后通过cookie 就可以直以被盗用户的身份登录站点。这就是cookie 劫持。举个简单例子: 某人写了一篇很有意思的日志,然后分享给大家,很多人都点击查看并且分享了该日志,一切似乎都很正常,然而写日志的人却另有用心,在日志中偷偷隐藏了一个 对站外的请求,那么所有看过这片日志的人都会在不知情的情况下把自己的cookie 发送给了 某人,那么他可以通过任意一个人的cookie 来登录这个人的账户。
    在 SQL 注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中。
    拒绝服务攻击即攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之。
    攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接

  5. PHP做好防盗链的基本思想 防盗链
    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
    网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益。 如何做防盗链?
    不定期更名文件或者目录
    原理是,服务器获取用户提交信息的网站地址,然后和真正的服务端的地址相比较, 如果一致则表明是站内提交,或者为自己信任的站点提交,否则视为盗链。实现时可以使用HTTP_REFERER1 和htaccess 文件(需要启用mod_Rewrite),结合正则表达式去匹配用户的每一个访问请求。
    文件伪装是目前用得最多的一种反盗链技术,一般会结合服务器端动态脚本 (PHP/JSP/ASP)。实际上用户请求的文件地址,只是一个经过伪装的脚本文件,这个脚本文件会对用户的请求作认证,一般会检查 Session,Cookie 或HTTP_REFERER 作为判断是否为盗链的依据。而真实的文件实际隐藏在用户不能够访问的地方,只有用户通过验证以后才会返回给用户
    这种反盗链方式,先从客户端获取用户信息,然后根据这个信息和用户请求的文件名 字一起加密成字符串(Session ID)作为身份验证。只有当认证成功以后,服务端才会把用户需要的文件传送给客户。一般我们会把加密的Session ID 作为URL 参数的一部分传递给服务器,由于这个Session ID 和用户的信息挂钩,所以别人就算是盗取了链接,该Session ID 也无法通过身份认证,从而达到反盗链的目的。这种方式对于分布式盗链非常有效。
    每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,否则输出404图片

  6. MySQL数据库性能优化
    正确使用索引:explain分析查询语句,组合索引,索引副作用(占空间、update)
    开启慢查询日志、使用慢查询分析工具mysqlsla;
    索引缓存、索引代价(插入更新索引);
    表锁,行锁,行锁副作用(update多时候变慢),在select和update混合的情况下,行锁巧妙解决了读写互斥的问题;
    MySQL Query语句优化的基本思路和原则

  7. 优化需要优化的Query;

  8. 定位优化对象的性能瓶颈;

  9. 永远用小结果集推动大的结果集;

  10. 尽可能在索引中完成排序;

  11. 只取自己需要的Columns;

  12. 仅仅使用最有效的过滤条件;

  13. 尽可能避免复杂的Join和子查询。
    2:锁定机制不一样,Myisam支持表锁定,而Innodb支持行锁
    4:Myisam能在特定环境下支持全文索引,而Innodb不支持
    6:在数据存储上,Myisam占用的空间少,Innodb相对多些
    7:Myisam在批量插入和查询方面速度上有优势,而Innodb由于支持行锁,所以在数据修改方面更胜一筹
    MyISAM:不支持事务、表锁和全文索引, 操作速度快
    InnoDB:行锁设计、支持外键、支持安全事务
    HEAP:数据存放在内存中,临时表
    CSV: 存储引擎把数据以逗号分隔的格式存储在文本文件中。
    FEDERATED:存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表 Archive: 只支持INSERT和SELECT操作, 压缩后存储, 非常适合存储归档数据
    Merge:允许将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们 表类型,区分表类型
    数据类型及详细定义,区分

  14. 变量如何定义?如何检查变量是否定义?如何删除一个变量?怎样检测变量是否设置?

  15. 一个变量的变名可以动态的设置和使用。

  16. 字符串怎么转成整数,有几种方法?怎么实现?
    强制类型转换: (整型)字符串变量名;
    直接转换:settype(字符串变量,整型);

  17. 标量数据和数组的最大区别是什么?
    一个标量只能存放一个数据,而数组可以存放多个数据。

  18. 常量如何定义? 如何检测一个常量是否被定义?常量的值只能是哪些数据类型?
    常量的值只能是标量类型的数据。

  19. 如果定义了两个相同的常量,前者和后者哪个起作用?
    前者起作用,因为常量一旦定义就不能被重新定义或者取消定义。

  20. 常量和变量有哪些区别?
    1)常量前没有$符号;
    2)常量只能通过define()定义,而不能通过赋值语句定义;
    3)常量可以在任何地方定义和访问,而变量有全局和局部之分;
    4)常量一旦定义就不能被重新定义或者取消定义,而变量而通过赋值方式重新定义;
    5)常量的值只能是标量数据,而变量的数据库类型有8种原始数据类型。

  21. PHP中常用的几个预定义的全局数组变量是哪些?
    有9大预定义的内置数组变量:

  22. 在实际开发中,常量最常用于哪些地方?
    1)连接数据库的信息定义成常量,如数据库服务器的用户名、密码、数据库名、主机名;
    2)将站点的部分路径定义成常量,如web绝对路径,smarty的安装路径,model、view或者controller的文件夹路径;
    3)网站的公共信息,如网站名称,网站关键词等信息

  23. 第二个函数调用失败不会报错,第一个会报错

  24. 字符串运算符“.”与算术运算符“+”有什么区别?
    当“a”“b”之间使用.时认为是连字符。如果两者间是+的时候php会认为是一次运算。
    1)如果+号两边的字符串是数字组成的,那么会将字符串自动转为整型;
    2)如果+号两边是纯粹的字母,那么会输出0;
    3)如果+号两边的字符串是以数字开头的,那么会截取字符串开头的数字,然后进行运算。

  25. foeach数组的时候指针是如何指向的?list()/each()/while()循环数组的时候指针如何指向的呢?
    当foreach开始执行的时候,数组内部的指针会自动指向第一个单元。因为foreach所操作的是指定数组的拷贝,而不是该数组本身。而each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后一个单元。如果要再次使用each()遍历数组,必须要使用reset().
    reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。
    数组与字符串之间的转换

  26. 字符串定义的时候单引号和双引号有什么区别?
    单引号加载速度比双引号加载速度快
    B. 去除字符串首尾空格的函数: trim ltrim rtrim(别名:chop) 使用第二个参数,还可以去除指定的字符。
    E. 截取字符串长度的的函数:substr()
    41.页面字符出现乱码,怎么解决?
    1.首先考虑当前文件是不是设置了字符集。查看是不是meta标签中写了charset,如果是php页面还可以看看是不是
    2.如果设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致,
    3.如果涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,两者必须统一,

  27. 在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
    用户在网站表单提交数据的时候,为了防止脚本攻击(比如用户输入<script>alert(111);</script>),php端接收数据的时候,应该如何处理?

  28. 文件上传需要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
    1.首现要在php.ini中开启文件上传;
    2.在php.ini中有一个允许上传的最大值,默认是2MB。必要的时候可以更改;

    6.要注意上传文件的大小MAX_FILE_SIZE、文件类型是否符合要求,上传后存放的路径是否存在。
    可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新命名,这样就避免了重名。可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。
  • 什么是ajax?ajax的原理是什么?ajax的核心技术是什么?ajax的优缺点是什么?
    页面中用户的请求通过ajax引擎异步地与服务器进行通信,服务器将请求的结果返回给这个ajax引擎,
    最后由这个ajax引擎来决定将返回的数据显示到页面中的指定位置。Ajax最终实现了在一个页面的指定位置可以加载另一个页面所有的输出内容。
    这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以ajax技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,
    减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。

    1. 减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端闲置的资源进行处理;
    2. 在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。
      Ajax的缺点是不利于seo推广优化,因为搜索引擎无法直接访问到ajax请求的内容。
  • GD2库生成缩略图的步骤是什么?
    1). 读取希望生成缩略图的源图像,创建图像对象:【根据图片格式不同,函数也相应不同】

  • GD2库给图片增加水印如何做?

  • 利用imagestring()函数就可以在图片上写文本水印。

    1. 167.双引号和单引号的区别
      答:双引号解释变量,单引号不解释变量
      双引号里插入单引号,其中单引号里如果有变量的话,变量解释
      双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\
      能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
  • 1、PHP语言的一大优势是跨平台,什么是跨平台?一、PHP基础: PHP的运行环境最优搭配为Apache+MySQ...

  • [本图出自脸萌] “罢黜百家,独尊儒术”是汉朝儒学大家董仲舒提出提出的“思想要大一统”被汉武帝接受后施行的政策,从...

  • 2017年会计行业动荡不安,会计从业资格证暂停考试,中级会计取消必须持有从业证限制,会计法正在拟定修改中,可真是几...

  • 假期去家访,因为小茜逃课、欠学分等情节,比较严重。 当我看到这个家庭组合时,直觉这是个幸福的家庭,父母都很...

  • 你是我拂晓时分做的一场梦,天光亮起前就要散了。 有些人来到你的世界,也许就是那么一刹那。终究就走不完这一生。

我要回帖

更多关于 utf8可以显示中文吗 的文章

 

随机推荐