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等。
有区别的, 只是 转义字符, 对于单引号, 转义是无效的, 按原样输出, 而对于双引号, 才会转义,如\n, 使用时仍然要nl2br函数。
web文件的编码字符集,不管是mea还是header声明, 只是告诉浏览器,我的编码字符集是什么, 如utf8, 只是"声明", 实际具体是什么编码, 还要看真实的编辑器保存的编码格式
字符串变量的定义??
双引号中可以包含变量, 但是由于php的变量允许中文, 而且变量匹配是"贪婪匹配", 所以如果变量在字符串中间的时候, 要加上大括号{}来分隔定界. 当然如果在字符串的末尾, 变量不必加大括号.
字符串的定界符?
为什么要使用? 用途是: 在用字符串常常输入大段的html代码或js的时候, 里面包含很多的标签等, 你就要进行很多的单双引号, 特殊符号等转义, 这样是很痛苦的, 所以可以使用定界符就比较方便了. 而且, 定界符字符串会保留原来的格式,如回车/换行, 就相当于pre标签.
定界符以 关键字 "尖括号<<<" 开始, 然后是定界符标识, 最后一行是定界符标识加分号. 格式要严格区分, 不能有多余的空格和tab键等.
定界符的起始标识和结束标识, 就相对于编程中的大括号对{}一样.
php字符串操作集锦的更多相关文章
- delphi关于文件操作集锦
关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...
- python学习笔记(字符串操作、字典操作、三级菜单实例)
字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...
- Eclipse for Java EE软件操作集锦(二)
看本文章之前请确保已经了解eclipse建立web工程,如果有疑问请查看本系列文章第一篇 eclipse软件操作集锦(一) 1.我们添加一个servlet 配置一下web.xml测试一下是否能正常显示 ...
- shell编程常用的截取字符串操作
1. 常用的字符串操作 1.1. 替换字符串:$ echo ${var/ /_}#支持正怎表达式 / /表示搜索到第一个替换,// /表示搜索到的结果全部替换. ...
- java 字符串操作和日期操作
一.字符串操作 创建字符串 String s2 = new String("Hello World"); String s1 = "Hello World"; ...
- [No000078]Python3 字符串操作
#!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分 ...
- Python 字符串操作及string模块使用
python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串操作需求: python的字符串属性函数 python的string模块 1.字符串属性方法操作: 1.>字符串格式输出对 ...
- C语言字符串操作总结大全
1)字符串操作 strcpy(p, p1) 复制字符串 函数原型strncpy(p, p1, n) 复制指定长度字符串 函数原型strcat(p, p1) 附加字符串 函数原型strn ...
- c# 字符串操作
一.字符串操作 //字符串转数组 string mystring="this is a string" char[] mychars=mystring.ToCharArray(); ...
随机推荐
- github的使用
1.gitbub概念 github是一个基于git的代码托管平台,付费用户可以建私人仓库,免费用户用公共仓库,但是代码公开. 2.注册账户以及创建仓库 在github官网地址:https://gith ...
- x01.MagicCube: 简单操作
看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- CANopen学习——协议栈
协议,是双方都提前商量好的通讯约定. 例如:发送1代表灯亮,发送0代表灯灭. 但由于只是单bit的0和1在通信时,抗干扰太弱,且多种控制时不能区分,此时扩展一下协议. 例如: 头 地址 ...
- SVN提交代码的规范
协同开发中SVN的使用规范 先更新,再提交 SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 如果在修改的期间别人也更改了svn的对应文件, ...
- Animator Controller 继承关系
准备知识 对于Animator Controller中蜘蛛网一样的几十条连线,后续如果靠人工维护,那成本将是很大. AnimatorOverrideController组件的文档:https://do ...
- [LeetCode] Reorder List 链表重排序
Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do th ...
- 【原】Spark之机器学习(Python版)(一)——聚类
kmeans聚类相信大家都已经很熟悉了.在Python里我们用kmeans通常调用Sklearn包(当然自己写也很简单).那么在Spark里能不能也直接使用sklean包呢?目前来说直接使用有点困 ...
- hihocoder-1014 Trie树
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...
- Redis设计与实现读书笔记(一) SDS
作为redis最基础的底层数据结构之一,SDS提供了许多C风格字符串所不具备的功能,为之后redis内存管理提供了许多方便.它们分别是: 二进制安全 减少字符串长度获取时间复杂度 杜绝字符串溢出 减少 ...