PHP 入门 - 3.字符串
文章目录
- 引用字符串常量
- 变量插值
- 直接使用:
- 用大括号:
- 单引号括起来的字符串
- here文档
- 输出字符串
- echo
- printf()
- print_r 和 var_dump()
- 整理字符串
- 删除空白符号
- 改变大小写
- 编码和转义
- HTML
- 对**所有**特殊字符进行实体引用
- 只对 HTML 语法字符进行引用
- 删除 HTML 标签
- 提取元标签(meta tag)
- URL
- RFC 3986 编码和解码
- 查询字符串编码
- SQL
- C语言字符串编码
- 比较字符串
- 精确比较
- 自然排序与字典序之间的区别
- 近似比较
- 处理和查找字符串
- 子串
- 其他字符串函数
- 分解字符串
- 字符串查找函数
- 解析 URL
引用字符串常量
PHP 中可以使用三种方法来引入字符串的字面量:单引号、双引号和 UNIX Shell 衍生出来的 here 文档格式( heredoc
)。不同之处在于是否识别特殊的转义序列(对字符串进行编码和变量插值)和是否对变量进行解析
变量插值
在字符串中用变量的值来替换变量名。
直接使用:
$who = 'Kilroy';
$where = 'here';
echo "$who was $where"; // Kilroy was here
用大括号:
$n = 12;
echo "You are the {$n}th person"; // You are the 12th person
和一些 shell 环境不同,PHP 中的字符串不会重复解析,只处理在双引号字符串中的解析,然后把其结果作为字符串的值。
$bar = 'this is not printed';
$foo = '$bat';
print("$foo"); // $bar
单引号括起来的字符串
不能插值。除了 \'
和 \\
可以被转义,其他任何的反斜杠只被解析成一个反斜杠。
here文档
heredoc 由 <<<
和 标识符组成。并且其中的双引号和单引号被跳过,空白符被保留。
$dialogue = <<< NoMore"It's not going to happen!" she fumed.
NoMore;
echo $dialogue; // 输出: "It's not going to happen!" she fumed.
输出字符串
echo
echo 不是一个函数(它是一个语言结构),因此你不一定要使用小括号来指明参数,单引号,双引号都可以。如果你想给 echo 传递多个参数, 那么就不能使用小括号。
另外,在 echo 中拼接字符串,要考虑 ,
和 .
运算符的优先级。 ,
的优先级非常的低,所以不需要圆括号保证优先级。 .
具有更高的优先级,为了正确性,必须使用圆括号。
echo "Sum: ", 1 + 2; // Sum: 3
echo "Hello ", isset($name) ? $name : "John Doe", "!"; // Hello John Doe!
echo 'Sum: ' . (1 + 2); // Sum: 3
echo 'Hello ' . (isset($name) ? $name : 'John Doe') . '!'; // Hello John Doe!
echo 和 print
最主要的不同之处是,echo 接受参数列表,并且没有返回值。
echo 是用来打印字符串的,所以用 echo 来打印数组会报错。
print
实际上不是函数(而是语言结构),所以可以不用圆括号包围参数列表。和 echo 最主要的区别: print
仅支持一个参数,并总是返回 1。
if (print("test")){ // testprint("It worked!"); // It worked!
}
printf()
通过替换模板(即格式化字符串)中的值所生成的字符。它源自标准的 C 库中的同名函数 printf()
printf(format[, $args[,...]]):int
// 使用
printf("$.2f", 27.452); // 27.45
sprintf()
和 printf()
的参数相同,但是它只返回生成的字符串而不是打印出来。
print_r 和 var_dump()
两者都是以易于理解的格式打印变量,相对来说 var_dump()
打印的变量更适合阅读,它会显示当前值的类型,显示共有多少个元素,且还会自动加上换行符。
整理字符串
删除空白符号
trim(string [, charlist]):string
: 返回删除了首尾空白符的字符串。ltrim(string [, charlist]):string
: 返回删除了首部空白的字符串。rtrim(string [, charlist]):string
: 返回删除了尾部空白的字符串。- 可选参数 charlist ,是可以指定要删除的字符列表。
不指定 charlist ,默认删除的字符为:
字符 | ASCII码 | 意义 |
---|---|---|
" " | 0x20,32 | 空格 |
“\t” | 0x09,9 | 制表符 |
“\n” | 0x0A,10 | 换行符 |
“\r” | 0x0D,13 | 回车符 |
“\0” | 0x00,0 | 空字节 |
“\x0B” | 0x0B,11 | 纵向制表符 |
改变大小写
strtolower(string):string
: 将字符串转换成大写。strtoupper(string):string
: 将字符串转换成小写。
编码和转义
HTML
HTML 中的特殊字符以实体字符标识,如 &(&)
和 <(<)
对所有特殊字符进行实体引用
htmlentities(string[, flags[, encoding[, double_encode]]]):string
将 HTML 字符转换成对应的实体字符。
string
为输入的字符,flags
为选择哪种模式的转换,encoding
为字符串的编码, double_encode
为是否转现有的 HTML 实体。
只对 HTML 语法字符进行引用
htmlspecialchars(string[, flags[, encoding[, double_encode]]]):string
参数与上面相同,只是对部分实体进行转换:&(&)
"(")
'(')
<(<)
>(≷)
删除 HTML 标签
strip_tags(string[, allowable_tags]):string
: 从字符串中删除 HTML 标签。
allowable_tags
来指定字符串中不被删除的标签。只用列出标签的开始形式。
提取元标签(meta tag)
get_meta_tags(filename|url[, use_include_path]):array
: 从一个文件中提取所有的 meta
标签的 content
属性,返回一个数组。
将 use_include_path
设置为 TRUE 将使 PHP 尝试按照 include_path
标准包含路径中的每个指向去打开文件。只用于本地文件,不适用与 URL 。
URL
应该只对部分 URL 进行编码:http://www.example.com/{这里进行编码}
RFC 3986 编码和解码
rawurlencode(string):string
: 编码函数,除了-
,_
,.
之外的所有非字母数字字符都会被替换成百分号( % )后跟两位进制数。rawurldecode(string):string
: 解码函数。
查询字符串编码
urlencode(string):string
:编码函数urldecode(string):string
:解码函数
与 PFC 3986 相比,唯一的区别在于将空格编码成加号( + ),而不是 %20 。这两个函数对生成查询字符串很有帮助
SQL
在 SQL 中对查询字符串进行转义,只需将单引号、双引号、空字符和反斜杠前面加上反斜杠即可
addslashes(string):string
: 将单引号、双引号、空字符和反斜杠前面加上反斜杠。stripslashes(string):string
: 将单引号、双引号、空字符和反斜杠前面去掉反斜杠。
C语言字符串编码
addcslashes(string,charlist):string
: 以 C 语言风格使用反斜杠转义 string 中的字符,其中 charlist 指定要转义的字符范围(从小到大,如:A..Z
)。stripcslashes(string):string
: 返回去掉转义后的字符串。
比较字符串
精确比较
==
比较之前会进行转换,故:3 == '3'
,而 ===
不进行转换
对于 “PHP Rocks" < 5
,这将是 正确的。
因为 “PHP Rocks”
被转换成了 0
(因为字符串没有以数字开头)。所以比较要用到下面的函数。
strcmp(string,string):int
: 以字典序来比较strncasecmp(string,string):int
: 先转换成小写,在进行字典序比较strnatcasecmp(string,string):int
: 以自然排序比较
自然排序与字典序之间的区别
自然排序 | 字典序 |
---|---|
pic1.jpg | pic1.jpg |
pic5.jpg | pic10.jpg |
pic10.jpg | pic5.jpg |
pic50.jpg | pic50.jpg |
近似比较
soundex(string):string
: 生成一个字符串大致表示单词在英语中如何发音。metaphone(string[, phonemes]):string
: 生成一个字符串大致表示单词在英语中如何发音。比soundex()
更加精确。其中指定 phonemes 来限制生成的字符串长度,默认为 0 ,也就是没有限制。similar_text(string1, string2[, &percentage]):int
: 返回两个字符串参数共有的个数,第三个参数是通过引用的方式,来计算共有字符百分比。注意,此算法复杂度为O(n3),且使用递归。levenshtein(string1,string2[, cost_ins, cost_rep, cost_del]):int
: 返回两个字符串之间的编辑距离- 编辑距离:通过添加、替换和删除操作能将 string1 转换成 string2。如:
levenshtein("cat","cot")
返回 1 - 另外三个选项是指定插入、替换和删除操作的次数,来查看函数的结果。
- 编辑距离:通过添加、替换和删除操作能将 string1 转换成 string2。如:
处理和查找字符串
子串
substr(string, start[, length]):string
: 返回字符串string
由start
开始,长度为length
的子串。substr_count(haystack, needle[, offset[, length]]):int
: 返回子字符串needle
在字符串haystack
中出现的次数。其中offset
为偏移位置,length
为从偏移位置开始计算的长度。substr_replace(string, replacement, start[, length]):mixed
: 字符串string
的副本中将由start
和可选的 length 参数限定的子字符串使用replacement
进行替换。另:start
可以为负数。如下例子://设定 length 为 0 来实现无删除的插入: echo substr_replace("good bye citizen", "kind ", 9, 0); // good bye kind citizen //设定替换串为 “” 来实现无插入的删除: echo substr_replace("good bye kind citizen", "", 8; // good bye //如何在字符串开头插入内容: echo substr_replace("good bye", "now it's time to say", , 0); // now it's time to say good bye
其他字符串函数
strrev(string):string
: 返回string
反转后的字符串。str_repeat(input, multiplier):string
: 返回input
重复multiplier
此后的结果。
分解字符串
分解:explode(separator, string[, limit]):array
: 返回由字符串组成的数组,每个元素都是 string
的一个子串,他们被字符串 separator
作为边界点分割出来。
合并:implode(separator, array)
: 用 separator 将一维数组连接成一个字符串。若只有字符串参数,连接的字符串将没有分隔符,如:
$arr = array(1,2,3,4);
echo implode($arr); // 1234
sscanf(string,format[, &...]):mixed
: 按照模板来分解一个字符串。
字符串查找函数
strpos(haystack, needle[, offset = 0]):int
: 返回needle
在haystack
中首次出现的位置。注意:如果needle
出现在 haystack 的开头,函数返回0
。故我们在判断的是否存在与字符串中,一定要用===
符号来判断是否找到指定的字符串。strrpos()
: 和上述参数一样,只是返回最后一次出现的位置。strstr(haystack, needle[, before_needle = FALSE]):string
: 返回hatstack
字符串从needle
第一次出现的位置开始到haystack
结尾的字符串。若指定before_needle
为 TRUE ,则将返回haystack
位置之前的部分。stristr()
: 不区分大小写的strstr()
,且参数一致。strchr()
:strstr()
的别名函数。strtchr(haystack, needle):string
: 返回haystack
字符串中的一部分,以needle
最后出现的位置开始,知道haystack
末尾。注意:如果needle
包含了不止一个字符,那么仅使用第一个字符。needle
如果为数字的话,则转换成对应的ascii
码。strspn(subject, mask[, start[, length]]):int
返回subject
开头包含多少个特定的mask
字符。如下例://判断 $str 字符串是否为一个八进制数 function isOctal($str) {return strspn($str,'01234567') == strlen($str); }
strcspn(str1, str2[, start[, length]]):int
: 返回str1
中,所有字符都不存在与str2
范围的起始子字符串的长度。如:echo strcspn('hello','l'); // 2 hello 中 有两个 l ,它默认匹配最后的字符,也就是下标为 3 的 l ,所以这里返回 2
解析 URL
parse_url(url):array
: 返回一个由 URL 的各个成分组成的数组。
感谢你看到了这里。如果文章有错误,请评论指正,谢谢!
PHP 入门 - 3.字符串相关推荐
- python语言入门n-python语言入门之字符串的一些用法
本篇教程探讨了python语言入门之字符串的一些用法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 一.字符串的拼接: a="123' b="ab ...
- 【李刚-21天通关Python】第一章:Python入门与字符串
[李刚-21天通关Python]第一章:Python入门与字符串 第一章:Python入门与字符串 数据类型 字符串 运算符 实操:简易计算器 & 进制转换 章节分篇链接: [李刚-21天通关 ...
- Python入门程序 字符串应用(学号判断程序、密码破解程序、身份证的秘密)
Python入门程序 字符串应用(学号判断程序.密码破解程序.身份证的秘密) 没想到学校会在大二同时学习Java的的时候一起学Python语言,在这写一些平时的python编程作业. 就从字符串的应用 ...
- python 字符ab+字符c 2_python入门 之 字符串(二)
注: 来自:<Python 编程 从入门到实践> 环境: windows Python 2.7 Python 之禅 1. 输入代码: import this 2. 它从本质上阐述了代码的指 ...
- python字符串定义符_python入门——定义字符串
坚持每天更新,帮助入门python. kali linux 小伙伴们,大家好,今下午我们一起学习在python中定义字符串. 那么什么是字符串呢?字符串或串(String)是由数字.字母.下划线组成的 ...
- Kotlin入门(5)字符串及其格式化
上一篇文章介绍了数组的声明和操作,包括字符串数组的用法.注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了. 首先要 ...
- python字符串换行连接_python入门 python字符串换行显示、字符串太长\连接多行
#coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...
- Python 入门之字符串处理
第1关:字符串的拼接:名字的组成 任务描述 本关任务是将两个不同的字符串,拼接形成一个字符串,并将新字符串输出来.字符串或串(String)是由数字.字母.下划线组成的一串字符.在 Python 中, ...
- c#将字符串转换为数组_pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- 字典对中文字符串进行排序 python_Python基础入门:字符串和字典
一.学习内容 字符串 字典 二.学习概述 1. 字符串的定义 Python 中字符串被定义为引号之间的字符集合. Python 支持使用成对的 单引号 或 双引号. Python 的常用转义字符 2. ...
最新文章
- 2021首期Nature封面:牛津大学ML算法实现10万高压非晶硅原子的模拟​ | AI日报
- python 装饰器 参数-如何将额外的参数传递给Python装饰器?
- EditText获取焦点并自动弹出软键盘
- 关于IE某些原因导致下拉列表弹出阻止窗口的解决办法
- 使用Spring WebFlux从Corda节点流式传输数据
- django项目连接远程数据库
- 图论 —— 环与块 —— 负权环
- 因为一个字符校对问题,我的大厂面试挂了
- android 关于view的onTouch和onClick同时触发解决方案
- html 单选框_HTML
- Jmeter插件安装perfmon(服务器资源监控工具)
- Python如何自动操作电脑桌面应用程序
- numpy.insert用法以及内插插0的方法
- App 上线被拒绝的原因有哪些?
- AI 人工智能 探索 (九)
- excel表 更改后缀名 xlsx转成csv csv转换xlsx
- 基因组学两个理念:生命是序列的;生命是数字的。
- Linux中查看jdk版本
- 高效学习的4种方法,提升你的职场竞争力
- 高档的电数码产品机箱设计标准和方法
热门文章
- r k-means 分类结果_机器学习-Kmeans均值聚类算法(贪心学院)
- java protobuf 例子_java使用protobuf例子
- python123文件和数据格式化测试7_二级Python----文件和数据格式化(DAY 7)
- Java追加写json_java – ObjectMapper追加文件JSON
- tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总
- (11) nginx + keepalived 双机热备
- Struts 2配置详解
- mybatis入门常见错误
- 干货|如何在无回显时渗透
- js检测开发者工具Devtools是否打开防调试