web操做, 主要就是对字符文本信息进行处理, 因此, 字符串操做几乎占了很大一部分的php操做.包括php
注意strstr 和 strtr的区别?
前者表示字符串查找返回字符串,后者表示字符串中字符替换:html
字符串替换
str_replace, 返回的是另外的结果, 原来的字符串不会被修改,至关于传递一个$haystack的副本linux
字符串截取:
中文截取模块的名字是 :php_mbstring.dll
在index.php中,现实的模块也是: mbstring.
只有在 代码中才是: mb_substr...(前面两个的mb和string都是挨着的...)
substr的第二个参数若是是负数,表示从最后面倒过来数
关键是要记住第三个参数就行了: 第三个参数不少时候默认缺省,表示截取到字符串结尾,
当第三个参数$length长度,为负数的时候: 表示从最后面倒过来 数长度, 其实是 指 到倒数的位置时 截取就结束了。
可是,长度为负数的时候,结束位置处的字符是不算的,不会包含在截取字符串中的。
这个特别适用于 去掉字符串最后几个字符,如文件的扩展名的状况。如:web
$filename = "abcd中文cccc.jpg"; echo $basename = substr($filename, 0, -4);
若是是中文的字符串截取, 就要使用 mb_substr, 最后一个参数指定字符集编码. 为何呢? 由于默认的substr截取字符串的长度是 以 一个字节为 1个 "长度计量单位"的. 而utf8汉字是算三个字节长度的, gbk是算"2个字节长度的". 因此, 若是不是恰好截取到汉字的字节时, 就可能把 组成一个汉字的三个字节 硬生生的 截断, 取其中的一个/两个字节 来显示, 天然就产生乱码了.
这时, 使用mb_substr就会把1个汉字做为 一个 字符长度 来看待了,也就不会有乱码了.编程
支持中文字符串截取的模块的名字是 :php_mbstring.dll
在index.php中,现实的模块也是: mbstring.
只有在 代码中才是: mb_substr...
substr,的第二个参数若是是负数,表示从最后面倒过来数
// 只要记住第三个参数就行了: 第三个参数不少时候默认缺省,表示截取到字符串结尾,
// 当第三个参数$length长度,为负数的时候: 表示从最后面倒过来 数长度, 其实是 指 到倒数的位置时 截取就结束了。
// 可是,长度为负数的时候,结束位置处的字符是不算的,不会包含在截取字符串中的。
// 这个特别适用于 去掉字符串最后几个字符,如文件的扩展名的状况。如:vim
$str = "abc中文字符串edf"; echo substr($str, 0,7); // 显示有乱码,或者后面的乱码没有显示, 或者乱码统一的用一个 方框 像“口”的 一半 来表示 echo mb_substr($str, 0, 7, 'utf8'); // 没有乱码,汉字做为一个字符长度 来表示。
第一, 要让页面的编码声明和编辑器保存文件的实际编码要一致, 如 dw和linux下的vim默认的都是用utf8来保存文件的, 而windows下的notepad等编辑器默认的保存文件是用gb2312,gbk等。 因此你最好在用dw或vim编辑保存文件时声明为 utf8.不然若是你声明为gb2312时,无论什么浏览器(ff或ie),均可能出现乱码。固然除非你手动设置浏览器的编码格式, 恰好跟你编辑器实际保存的编码相同时, 不会出现乱码。
第二, 在ie中, 为何有时候不是全部的状况!!,在页面中已经声明了使用utf8编码, 可是ie仍然出现乱码。 而ff则不会。
这是因为二者在解析网页时的方式是不同的:
对于ff, 它是首先去读取 http-request header的, 会首先 去读取到 meta或php 的header中指定的 编码字符集, 而后ff就会自动地 按照这个网页指定的 编码字符集去解析 文档。 因此ff你 页面指定的是什么字符集, 就会按照什么字符集去解析。
而对于ie则不一样, 它并不会首先去 读取http header中页面指定的字符集。 而是首先 按照 “默认” 的字符集(windows是gb2312)来解析文档, 或者若是你已经打开了ie并对编码作了改动, 则当前ie窗口会保持设定值来解析后面的 全部文档。 最后才会去读取 http header。(也就是说, ie是先解析标签, 而后才会去读取http header) 而这时文档已经被解析甚至已经被呈现出来了, 因此不会再返回去再修改。 只有等下一次手动修改ie编码了....windows
ie为何有时候显示输出空白页?
对于用utf8编写的web文档, 用gb2312,或gbk解析时, 当title之间有 **奇数个汉字等全角字符时, 若是按照双子节的编码进行解析时, 就会造成 "半个汉字"的状况, 而后这个 "半个汉字"和后面的</title>
结合在一块儿,导致 ie觉得找不到title的结束标签, 把后面的全部web内容都看成标题了, 从而就没有输出了.浏览器
单引号和双引号 对于标签和 转义的区别?
对于标签来讲, 无论你是单引号, 仍是双引号, 都是同样的, 单双引号对于标签来讲是没有关系的。由于即便是按原样输出,标签仍是同样能被浏览器解析, 如br, p等。
有区别的, 只是 转义字符, 对于单引号, 转义是无效的, 按原样输出, 而对于双引号, 才会转义,如\n, 使用时仍然要nl2br函数。编辑器
web文件的编码字符集,不论是mea仍是header声明, 只是告诉浏览器,个人编码字符集是什么, 如utf8, 只是"声明", 实际具体是什么编码, 还要看真实的编辑器保存的编码格式函数
字符串变量的定义??
双引号中能够包含变量, 可是因为php的变量容许中文, 并且变量匹配是"贪婪匹配", 因此若是变量在字符串中间的时候, 要加上大括号{}来分隔定界. 固然若是在字符串的末尾, 变量没必要加大括号.
字符串的定界符? 为何要使用? 用途是: 在用字符串经常输入大段的html代码或js的时候, 里面包含不少的标签等, 你就要进行不少的单双引号, 特殊符号等转义, 这样是很痛苦的, 因此可使用定界符就比较方便了. 并且, 定界符字符串会保留原来的格式,如回车/换行, 就至关于pre标签. 定界符以 关键字 "尖括号<<<" 开始, 而后是定界符标识, 最后一行是定界符标识加分号. 格式要严格区分, 不能有多余的空格和tab键等. 定界符的起始标识和结束标识, 就相对于编程中的大括号对{}同样.