资讯专栏INFORMATION COLUMN

PHP 学习总结之字符串

WelliJhon / 756人阅读

摘要:因此,当需要操作字符集的字符串时候,请务必安装扩展,并使用相应的函数代替原生的字符串函数中国扩展大部分的函数都需要基于一个编码内部编码来处理,请务必统一使用编码,这个大部分可以在中配置。

创建

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 
World!";
#Hello
#World!
3. heredoc 语法结构

与双引号字符串相似。结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号;标记之间的变量可以被正常解析,但是函数则不可以。常用在输出包含大量 HTML 文档的时候。

$str = "heredoc";
$html = <<
    

$str

END; echo $html; #
#
#
#

heredoc

#
#
#
4. nowdoc 语法结构

heredoc 语法结构字符串相似,但是 nowdoc 不进行变量和转义序列的解析操作。

$str = "nowdoc";
$html = <<<"END"

$str

END; echo $str; #
#
#
#

$str

#
#
#
字符串编码

在 PHP 字符串中,每个字符使用一个字节存储(内存中),这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode。

PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息,由程序员来决定。由于 PHP 并不特别指明字符串的编码,那字符串到底是怎样编码的呢?答案是字符串会被按照该脚本文件相同的编码方式来编码。

一般情况下,虽然 PHP 内部不支持 Unicode 字符集,但是文件支持 UTF-8 编码,绝大部分情况下不会有什么问题,但是遇到字符串编码转换的时候就有问题了,比如在一个 UTF-8 编码的 PHP 文件中,程序输出的字符数(6)并不等于实际的字符数(2):

echo strlen("中国"); # 6
mbstring 提供了针对多字节字符串的函数,能够帮你处理 PHP 中的多字节编码。 除此以外,mbstring 还能在可能的字符编码之间相互进行编码转换。

因此,当需要操作 Unicode 字符集的字符串时候,请务必安装 mbstring 扩展,并使用相应的函数代替原生的字符串函数:

echo mb_strlen("中国", "UTF-8"); # 2
mbstring 扩展大部分的函数都需要基于一个编码(内部编码)来处理,请务必统一使用 UTF-8 编码,这个大部分可以在 PHP.INI 中配置。

对于 PHP 字符串编码问题,强烈建议:

PHP 脚本文件使用 UTF-8 无 BOM 编码格式;

字符串操作使用 mbstring 扩展函数;

数据库的连接和存储使用 UTF-8 编码;

HTML 文档使用 UTF-8 编码。

字符串格式化
1. 字符串去除

rtrim() — 删除字符串末端的空白字符(或者其他字符)
ltrim() — 删除字符串开头的空白字符(或其他字符)
trim() — 去除字符串首尾处的空白字符(或者其他字符)

$text = "		These are a few words :) ...  
";
echo rtrim($text); # "		These are a few words :) ..."
echo ltrim($text); # "These are a few words :) ...  
"
echo trim($text);  # "These are a few words :) ..."

$trimmed = trim($hello, "ld"); # "Hello Wor"
2. 格式化字符串以便输出

nl2br() — 在字符串所有新行之前插入 HTML 换行标记
printf() — 输出格式化字符串
sprintf() — 把格式化的字符串写入变量中

echo nl2br("hello 
world");
#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("Test", ENT_QUOTES); # Test

echo htmlentities("A "quote" is bold"); # A "quote" is bold
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,phone
3. 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"); # 0
3. strnatcmp()

使用自然排序算法比较字符串:

echo strnatcmp("img12.png", "img10.png"); # 1,
字符串查找和替换
1. strstr()

查找字符串的首次出现并返回字符串:

echo strstr("name@example.com", "@"); # @example.com
2. 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 Shanghai
4. 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 "匹配成功
"; } else { echo "匹配失败
"; }
2. preg_match_all()

执行一个全局正则表达式匹配:

$str = "Name: John Poul 
Title: PHP Guru"; preg_match_all("/(.*)/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("/ss+/", " ", $str); # "foo o"

$count = 0;
echo preg_replace(array("/d/", "/s/"), "*", "xp 4 to", -1 , $count); # xp***to
echo $count; # 3

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28509.html

相关文章

  • PHP 学习总结变量

    摘要:小驼峰法大驼峰法匈牙利命名法变量名属性类型对象描述。是一种弱类型语言,变量在使用之前并不需要声明类型,且同一变量可以保存多种不同类型的数据。另外,在函数内部创建的静态变量是无法在函数外部使用的。 变量标识符 标识符即是变量的名称,PHP 中关于变量的标识符有以下规则: 由任意字母、数字、下划线组成,但不能以数字开头 严格区分大小写 为了科学规范标识符,主要有以下几种流行的命名方式:...

    bitkylin 评论0 收藏0
  • 个人建议PHP面试的准备

    摘要:个人也建议不要满足于自己当下所知道的,多去拓展自己,多去学新的东西。作为一个面试者来说,知识点的记忆准备为的是更好的应对面试中技术面中问到的各种问题。 你好,是我琉忆——PHP程序员面试笔试系列图书的作者。 随着越来越多的人开始迈入PHP开发工程师的队列,不管是一个PHP新手还是一个有一两年开发经验的PHPer都不得不去面对找工作前面试这件事。 我现在以个人对面试的经历和见解来全面的对...

    macg0406 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0

发表评论

0条评论

WelliJhon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<