PHP 学习总结之字符串
2018-04-05 13:45
169 查看
创建
PHP 支持 4 种方式来创建一个字符串:单引号、双引号、heredoc语法结构和
nowdoc语法结构。1. 单引号在单引号字符串中,变量和特殊字符将不会被转义替换,除了反斜杠和单引号本身:
echo 'Arnold once said: "I\'ll be back"'; # Arnold once said: "I'll be back" echo 'You deleted C:\\*.*?'; # You deleted C:\*.*?2. 双引号能够识别字符串中的变量和转义序列:
$juice = 'apple'; echo "$juice juice."; # apple juice. echo "Hello \nWorld!"; #Hello #World!3.
heredoc语法结构与双引号字符串相似。结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号;标记之间的变量可以被正常解析,但是函数则不可以。常用在输出包含大量 HTML 文档的时候。
$str = 'heredoc'; $html = <<<END <div class="container"> <div class="row"> <div class="col-xs-4"> <p>$str</p> </div> </div> </div> END; echo $html; #<div class="container"> # <div class="row"> # <div class="col-xs-4"> # <p>heredoc</p> # </div> # </div> #</div>4.
nowdoc语法结构与
heredoc语法结构字符串相似,但是
nowdoc不进行变量和转义序列的解析操作。
$str = 'nowdoc'; $html = <<<'END' <div class="container"> <div class="row"> <div class="col-xs-4"> <p>$str</p> </div> </div> </div> END; echo $str; #<div class="container"> # <div class="row"> # <div class="col-xs-4"> # <p>$str</p> # </div> # </div> #</div>
字符串编码
在 PHP 字符串中,每个字符使用一个字节存储(内存中),这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode。PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息,由程序员来决定。由于 PHP 并不特别指明字符串的编码,那字符串到底是怎样编码的呢?答案是字符串会被按照该脚本文件相同的编码方式来编码。一般情况下,虽然 PHP 内部不支持 Unicode 字符集,但是文件支持 UTF-8 编码,绝大部分情况下不会有什么问题,但是遇到字符串编码转换的时候就有问题了,比如在一个 UTF-8 编码的 PHP 文件中,程序输出的字符数(6)并不等于实际的字符数(2):echo strlen('中国'); # 6mbstring 提供了针对多字节字符串的函数,能够帮你处理 PHP 中的多字节编码。 除此以外,mbstring 还能在可能的字符编码之间相互进行编码转换。因此,当需要操作 Unicode 字符集的字符串时候,请务必安装
mbstring扩展,并使用相应的函数代替原生的字符串函数:
echo mb_strlen('中国', 'UTF-8'); # 2mbstring 扩展大部分的函数都需要基于一个编码(内部编码)来处理,请务必统一使用 UTF-8 编码,这个大部分可以在 PHP.INI 中配置。对于 PHP 字符串编码问题,强烈建议:PHP 脚本文件使用 UTF-8 无 BOM 编码格式;
字符串操作使用
mbstring扩展函数;
数据库的连接和存储使用 UTF-8 编码;
HTML 文档使用 UTF-8 编码。
字符串格式化
1. 字符串去除rtrim()— 删除字符串末端的空白字符(或者其他字符)
ltrim()— 删除字符串开头的空白字符(或其他字符)
trim()— 去除字符串首尾处的空白字符(或者其他字符)
$text = "\t\tThese are a few words :) ... \n"; echo rtrim($text); # "\t\tThese are a few words :) ..." echo ltrim($text); # "These are a few words :) ... \n" echo trim($text); # "These are a few words :) ..." $trimmed = trim($hello, "ld"); # "Hello Wor"2. 格式化字符串以便输出
nl2br()— 在字符串所有新行之前插入 HTML 换行标记
printf()— 输出格式化字符串
sprintf()— 把格式化的字符串写入变量中
echo nl2br("hello \nworld"); #hello #world printf('I need to pay $%.02lf', 1.3568); # I need to pay $1.36 $str = sprintf('I need to pay $%.02lf', 1.3568); echo $str; # I need to pay $1.36
htmlspecialchars()— 将特殊字符转换为 HTML 实体
htmlentities()— 将字符转换为 HTML 转义字符
echo htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); # <a href='test'>Test</a> echo htmlentities("A 'quote' is <b>bold</b>"); # A 'quote' is <b>bold</b>3. 格式化字符串以便存储
stripslashes()— 反引用一个引用字符串
addslashes()— 使用反斜线引用字符串
$str = "Is your name O\'reilly?"; echo stripslashes($str); # Is your name O'reilly? echo addslashes($str); # Is your name O\'reilly?4. 改变字符串的字母大小写
strtolower()— 将字符串转化为小写
strtoupper()— 将字符串转化为大写
ucfirst()— 将字符串的首字母转换为大写
ucwords()— 将字符串中每个单词的首字母转换为大写
$str = "Mary Had A Little Lamb and She LOVED It So"; echo strtolower($str); # mary had a little lamb and she loved it so echo strtoupper($str); # MARY HAD A LITTLE LAMB AND SHE LOVED IT SO $foo = 'hello world!'; $foo = ucfirst($foo); # Hello world! $foo = ucwords($foo); # Hello World!
字符串连接和分割
1.explode()使用一个字符串分割另一个字符串:
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); print_r($pieces); # Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5 [5] => piece6 )2.
implode() 或 join()将一个一维数组的值拼接为字符串:
$array = array('lastname', 'email', 'phone'); echo implode(',', $array); # lastname,email,phone3.
substr()返回字符串的子串:
echo substr('abcdef', 1); # bcdef echo substr('abcdef', 1, 3); # bcd echo substr('abcdef', -1, 1); # f
字符串比较
1.strcmp()二进制安全字符串比较(区分大小写):
echo strcmp('jochen', 'Jochen'); # 32,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。2.
strcasecmp()二进制安全比较字符串(不区分大小写):
echo strcasecmp('jochen', 'Jochen'); # 03.
strnatcmp()使用自然排序算法比较字符串:
echo strnatcmp('img12.png', 'img10.png'); # 1,
字符串查找和替换
1.strstr()查找字符串的首次出现并返回字符串:
echo strstr('name@example.com', '@'); # @example.com2.
strpos()查找字符串首次出现的位置:
$hello = 'Hello World'; if(strpos($hello, 'H') !== false) { echo 'Find'; } else { echo 'No Find'; }3.
str_replace()匹配字符串并替换:
$search = "world"; $replace = "Shanghai"; $subject = "Hello world!"; echo str_replace($search, $replace, $subject); # Hello Shanghai4.
substr_replace()替换指定位置的字符串:
$replace = "Shanghai"; $subject = "Hello world!"; echo substr_replace($subject, $replace, 6); # Hello Shanghai
正则表达式
1.preg_match()执行一个正则表达式匹配:
$email = '10001110@qq.com'; $pattern = "/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([.a-zA-Z0-9_-])+([.a-zA-Z0-9_-]+)+([.a-zA-Z0-9_-])$/"; if (preg_match($pattern, $email, $match)) { echo '匹配成功<hr />'; } else { echo '匹配失败<hr />'; }2.
preg_match_all()执行一个全局正则表达式匹配:
$str = "Name: <b>John Poul</b> <br> Title: <b>PHP Guru</b>"; preg_match_all("/<b>(.*)<\/b>/U", $str, $result); print_r($result); # Array ( [0] => Array ( [0] => John Poul [1] => PHP Guru ) [1] => Array ( [0] => John Poul [1] => PHP Guru ) )3.
preg_split()通过一个正则表达式分隔字符串:
$keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords); # Array ( [0] => hypertext [1] => language [2] => programming )4.
preg_replace()执行一个正则表达式的搜索和替换:
$str = 'foo o'; echo preg_replace('/\s\s+/', ' ', $str); # 'foo o' $count = 0; echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count); # xp***to echo $count; # 3
相关文章推荐
- PHP 用查询字符窜,cookie 和session 保存页面状态 的总结学习
- php每日学习总结(12)
- Linux字符驱动开发学习总结
- 【学习必看】php常见术语总结
- PHP代码审计学习总结
- php过滤特殊危险字符的总结
- 基于菜鸟教程的 php 学习总结
- 字符设备驱动框架学习总结
- PHP学习使用资源简单总结
- PHP学习笔记(1)-php与C 操作符的区别(总结)
- 总结一下:php的基础学习
- 黑马程序员__关于学习IO流字符流的缓冲区总结
- 【PHP入门篇】3.常量--慕课网【学习总结】
- 【嘉兴东臣php】HTML5和CSS3学习周总结
- 【PHP进阶篇】4.字符串操作--慕课网【学习总结】
- 初次学习PHP总结
- PHP学习总结(4)——PHP入门篇之PHP计算表达式
- PHP学习总结(10)——PHP入门篇之自定义网站根目录
- web服务器脚本安全 基础学习 总结【对应php 脚本】
- 学习php总结(一)