web操作, 主要就是对字符文本信息进行处理, 所以, 字符串操作几乎占了很大一部分的php操作.包括
注意strstr 和 strtr的区别?
前者表示字符串查找返回字符串,后者表示字符串中字符替换:
字符串替换
str_replace, 返回的是另外的结果, 原来的字符串不会被修改,相当于传递一个$haystack的副本
字符串截取:
中文截取模块的名字是 :php_mbstring.dll
在index.php中,现实的模块也是: mbstring.
只有在 代码中才是: mb_substr...(前面两个的mb和string都是挨着的...)
substr的第二个参数如果是负数,表示从最后面倒过来数
关键是要记住第三个参数就好了: 第三个参数很多时候默认缺省,表示截取到字符串结尾,
当第三个参数$length长度,为负数的时候: 表示从最后面倒过来 数长度, 实际上是 指 到倒数的位置时 截取就结束了。
但是,长度为负数的时候,结束位置处的字符是不算的,不会包含在截取字符串中的。
这个特别适用于 去掉字符串最后几个字符,如文件的扩展名的情况。如:
$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长度,为负数的时候: 表示从最后面倒过来 数长度, 实际上是 指 到倒数的位置时 截取就结束了。
// 但是,长度为负数的时候,结束位置处的字符是不算的,不会包含在截取字符串中的。
// 这个特别适用于 去掉字符串最后几个字符,如文件的扩展名的情况。如:
$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编码了....
ie为什么有时候显示输出空白页?
对于用utf8编写的web文档, 用gb2312,或gbk解析时, 当title之间有 **奇数个汉字等全角字符时, 如果按照双子节的编码进行解析时, 就会形成 "半个汉字"的情况, 然后这个 "半个汉字"和后面的</title>
结合在一起,致使 ie以为找不到title的结束标签, 把后面的所有web内容都当作标题了, 从而就没有输出了.
单引号和双引号 对于标签和 转义的区别?
对于标签来说, 不管你是单引号, 还是双引号, 都是一样的, 单双引号对于标签来说是没有关系的。因为即使是按原样输出,标签还是一样能被浏览器解析, 如br, p等。
有区别的, 只是 转义字符, 对于单引号, 转义是无效的, 按原样输出, 而对于双引号, 才会转义,如
, 使用时仍然要nl2br函数。
web文件的编码字符集,不管是mea还是header声明, 只是告诉浏览器,我的编码字符集是什么, 如utf8, 只是"声明", 实际具体是什么编码, 还要看真实的编辑器保存的编码格式
字符串变量的定义??
双引号中可以包含变量, 但是由于php的变量允许中文, 而且变量匹配是"贪婪匹配", 所以如果变量在字符串中间的时候, 要加上大括号{}来分隔定界. 当然如果在字符串的末尾, 变量不必加大括号.
字符串的定界符?
为什么要使用? 用途是: 在用字符串常常输入大段的html代码或js的时候, 里面包含很多的标签等, 你就要进行很多的单双引号, 特殊符号等转义, 这样是很痛苦的, 所以可以使用定界符就比较方便了. 而且, 定界符字符串会保留原来的格式,如回车/换行, 就相当于pre标签.
定界符以 关键字 "尖括号<<<" 开始, 然后是定界符标识, 最后一行是定界符标识加分号. 格式要严格区分, 不能有多余的空格和tab键等.
定界符的起始标识和结束标识, 就相对于编程中的大括号对{}一样.