php字符串操作集锦

时间:2022-10-23 15:52:27

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等。

有区别的, 只是 转义字符, 对于单引号, 转义是无效的, 按原样输出, 而对于双引号, 才会转义,如\n, 使用时仍然要nl2br函数。

web文件的编码字符集,不管是mea还是header声明, 只是告诉浏览器,我的编码字符集是什么, 如utf8, 只是"声明", 实际具体是什么编码, 还要看真实的编辑器保存的编码格式

字符串变量的定义??

双引号中可以包含变量, 但是由于php的变量允许中文, 而且变量匹配是"贪婪匹配", 所以如果变量在字符串中间的时候, 要加上大括号{}来分隔定界. 当然如果在字符串的末尾, 变量不必加大括号.

字符串的定界符?

为什么要使用? 用途是: 在用字符串常常输入大段的html代码或js的时候, 里面包含很多的标签等, 你就要进行很多的单双引号, 特殊符号等转义, 这样是很痛苦的, 所以可以使用定界符就比较方便了. 而且, 定界符字符串会保留原来的格式,如回车/换行, 就相当于pre标签.

定界符以 关键字 "尖括号<<<" 开始, 然后是定界符标识, 最后一行是定界符标识加分号. 格式要严格区分, 不能有多余的空格和tab键等.

定界符的起始标识和结束标识, 就相对于编程中的大括号对{}一样.

php字符串操作集锦的更多相关文章

  1. delphi关于文件操作集锦

        关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...

  2. python学习笔记(字符串操作、字典操作、三级菜单实例)

    字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...

  3. Eclipse for Java EE软件操作集锦(二)

    看本文章之前请确保已经了解eclipse建立web工程,如果有疑问请查看本系列文章第一篇 eclipse软件操作集锦(一) 1.我们添加一个servlet 配置一下web.xml测试一下是否能正常显示 ...

  4. shell编程常用的截取字符串操作

    1.          常用的字符串操作 1.1.           替换字符串:$ echo ${var/ /_}#支持正怎表达式 / /表示搜索到第一个替换,// /表示搜索到的结果全部替换. ...

  5. java 字符串操作和日期操作

    一.字符串操作 创建字符串 String s2 = new String("Hello World"); String s1 = "Hello World"; ...

  6. &lbrack;No000078&rsqb;Python3 字符串操作

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分 ...

  7. Python 字符串操作及string模块使用

    python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串操作需求: python的字符串属性函数 python的string模块 1.字符串属性方法操作: 1.>字符串格式输出对 ...

  8. C语言字符串操作总结大全

    1)字符串操作 strcpy(p, p1)  复制字符串  函数原型strncpy(p, p1, n)   复制指定长度字符串  函数原型strcat(p, p1)   附加字符串  函数原型strn ...

  9. c&num; 字符串操作

    一.字符串操作 //字符串转数组 string mystring="this is a string" char[] mychars=mystring.ToCharArray(); ...

随机推荐

  1. 真正高效的SQLSERVER分页查询&lpar;多种方案&rpar;

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  2. Retrieving the COM class factory for component with CLSID &lbrace;00024500-0000-0000-C000-000000000046&rcub; failed due to the following error&colon; 80070005&period;

    Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} fai ...

  3. ReactJs设置css样式

    前段时间看了React Native,但是感觉在安卓反面的开发并不成熟.有较多功能有待完善,而且自己在实际运用的过程中在一些模块上遇到了不晓得阻力,又苦于网上没有找到那么多资源.于是打算先放一段时间, ...

  4. C&num;基础知识之方法重载总结

    1.首先解释一下什么是方法重载?    方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术. 这里所说的参数不同是指以下几种情况: ①  参数的类型 ...

  5. go的基本数据类型

    一,数据类型的介绍 在go语言中,数据类型是用于声明函数和变量的:数据类型是为了把数据分成所需内存不同大小的数据,除了在需要使用大数据的时候才会申请大内存,这样就会充分的使用内存 Go 语言按类别有以 ...

  6. Spring-Boot数据库密码加密配置

    springboot集成mysql/oracle时需要在yml/properties中配置数据库信息,用户名密码是肯定有的,所以就涉及到密码的加密,当然不加密也是可以的,正如某位大佬所说的,不加密就像 ...

  7. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...

  8. eclipse模板

    文件(Files)注释标签: /** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo}(用一句话描述该 ...

  9. Contest Reviews&lpar;Updating&rpar;

    现在每天至少一套题又不太想写题解…… 那就开个坑总结下每场的失误和特定题目的技巧吧 2018.8.25[ZROI] T3传送门 T1:找规律找崩了…… 最好不要一上来就钻进大讨论,先想有没有普适规律 ...

  10. spring mysql多数据源配置

    spring mysql多数据源配置 @Configuration public class QuartzConfig { @Autowired private AutowireJobFactory ...