文章目录

  • 引用字符串常量
    • 变量插值
      • 直接使用:
      • 用大括号:
    • 单引号括起来的字符串
    • here文档
  • 输出字符串
    • echo
    • print
    • 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!

echoprint 最主要的不同之处是,echo 接受参数列表,并且没有返回值。

echo 是用来打印字符串的,所以用 echo 来打印数组会报错。

print

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 中的特殊字符以实体字符标识,如 &amp;(&)&lt;(<)

所有特殊字符进行实体引用

htmlentities(string[, flags[, encoding[, double_encode]]]):string 将 HTML 字符转换成对应的实体字符。

string 为输入的字符,flags 为选择哪种模式的转换,encoding 为字符串的编码, double_encode 为是否转现有的 HTML 实体。

只对 HTML 语法字符进行引用

htmlspecialchars(string[, flags[, encoding[, double_encode]]]):string 参数与上面相同,只是对部分实体进行转换:&(&amp;) "(&quot;) '(&apos;) <(&lt;) >(&gl;)

删除 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
    • 另外三个选项是指定插入、替换和删除操作的次数,来查看函数的结果。

处理和查找字符串

子串

  • substr(string, start[, length]):string : 返回字符串 stringstart 开始,长度为 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 : 返回 needlehaystack 中首次出现的位置。注意:如果 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.字符串相关推荐

  1. python语言入门n-python语言入门之字符串的一些用法

    本篇教程探讨了python语言入门之字符串的一些用法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 一.字符串的拼接: a="123' b="ab ...

  2. 【李刚-21天通关Python】第一章:Python入门与字符串

    [李刚-21天通关Python]第一章:Python入门与字符串 第一章:Python入门与字符串 数据类型 字符串 运算符 实操:简易计算器 & 进制转换 章节分篇链接: [李刚-21天通关 ...

  3. Python入门程序 字符串应用(学号判断程序、密码破解程序、身份证的秘密)

    Python入门程序 字符串应用(学号判断程序.密码破解程序.身份证的秘密) 没想到学校会在大二同时学习Java的的时候一起学Python语言,在这写一些平时的python编程作业. 就从字符串的应用 ...

  4. python 字符ab+字符c 2_python入门 之 字符串(二)

    注: 来自:<Python 编程 从入门到实践> 环境: windows Python 2.7 Python 之禅 1. 输入代码: import this 2. 它从本质上阐述了代码的指 ...

  5. python字符串定义符_python入门——定义字符串

    坚持每天更新,帮助入门python. kali linux 小伙伴们,大家好,今下午我们一起学习在python中定义字符串. 那么什么是字符串呢?字符串或串(String)是由数字.字母.下划线组成的 ...

  6. Kotlin入门(5)字符串及其格式化

    上一篇文章介绍了数组的声明和操作,包括字符串数组的用法.注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了. 首先要 ...

  7. python字符串换行连接_python入门 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  8. Python 入门之字符串处理

    第1关:字符串的拼接:名字的组成 任务描述 本关任务是将两个不同的字符串,拼接形成一个字符串,并将新字符串输出来.字符串或串(String)是由数字.字母.下划线组成的一串字符.在 Python 中, ...

  9. c#将字符串转换为数组_pandas入门: 时间字符串转换为年月日

    pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...

  10. 字典对中文字符串进行排序 python_Python基础入门:字符串和字典

    一.学习内容 字符串 字典 二.学习概述 1. 字符串的定义 Python 中字符串被定义为引号之间的字符集合. Python 支持使用成对的 单引号 或 双引号. Python 的常用转义字符 2. ...

最新文章

  1. 2021首期Nature封面:牛津大学ML算法实现10万高压非晶硅原子的模拟​ | AI日报
  2. python 装饰器 参数-如何将额外的参数传递给Python装饰器?
  3. EditText获取焦点并自动弹出软键盘
  4. 关于IE某些原因导致下拉列表弹出阻止窗口的解决办法
  5. 使用Spring WebFlux从Corda节点流式传输数据
  6. django项目连接远程数据库
  7. 图论 —— 环与块 —— 负权环
  8. 因为一个字符校对问题,我的大厂面试挂了
  9. android 关于view的onTouch和onClick同时触发解决方案
  10. html 单选框_HTML
  11. Jmeter插件安装perfmon(服务器资源监控工具)
  12. Python如何自动操作电脑桌面应用程序
  13. numpy.insert用法以及内插插0的方法
  14. App 上线被拒绝的原因有哪些?
  15. AI 人工智能 探索 (九)
  16. excel表 更改后缀名 xlsx转成csv csv转换xlsx
  17. 基因组学两个理念:生命是序列的;生命是数字的。
  18. Linux中查看jdk版本
  19. 高效学习的4种方法,提升你的职场竞争力
  20. 高档的电数码产品机箱设计标准和方法

热门文章

  1. r k-means 分类结果_机器学习-Kmeans均值聚类算法(贪心学院)
  2. java protobuf 例子_java使用protobuf例子
  3. python123文件和数据格式化测试7_二级Python----文件和数据格式化(DAY 7)
  4. Java追加写json_java – ObjectMapper追加文件JSON
  5. tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总
  6. (11) nginx + keepalived 双机热备
  7. Struts 2配置详解
  8. mybatis入门常见错误
  9. 干货|如何在无回显时渗透
  10. js检测开发者工具Devtools是否打开防调试