zoukankan      html  css  js  c++  java
  • php字符串操作集锦

    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键等.
    定界符的起始标识和结束标识, 就相对于编程中的大括号对{}一样.

  • 相关阅读:
    北风设计模式课程---11、策略模式
    北风设计模式课程---9、原型模式的作用和意义
    linux下lamp.sh一键配置lamp环境流程
    linux日常---1、linux下安装、查看、卸载包常用命令
    常见协议端口号,功能
    尚学linux课程---12、vim操作命令2
    搞笑视频分析---3、爱做饭的芋头:佛跳墙
    黑马day11 脏读数据&amp;解
    hdu 1150 Machine Schedule(最小顶点覆盖)
    Ubuntu在构建Robotframework+Selenium周围环境
  • 原文地址:https://www.cnblogs.com/bkylee/p/6195267.html
Copyright © 2011-2022 走看看