字符串是指由零个或多个字符构成的一个集合,这里所说的字符串主要包含以下几种类型:
数字类型(1,2,3)、字母类型(a,b,c)、特殊字符(#,$,%)、不可见字符(\n,\r,\t)
单引号和双引号: 双引号中的内容是经过PHP的语法分析器解析过的,任何变量在双引号中都会被转换成它的值
在进行SQL查询之前,所有字符串都必须加单引号,防止注入漏洞和SQL错误
字符串连接使用 . 。无法实现大量字符串连接,建议使用双引号包含变量的方式
去除字符串收尾空格和特殊字符: trim()
string trim(string str [, string charlist]);
charlist: 可选,指定需要从字符串中删除哪些字符,默认可选值: \0,\t,\n,\x0B,\r,空格,也可自己提供
凡是在字符串收尾出现在charlist中的字符都会去除
ltrim()去除左边的,rtrim()去除右边的
$str = " dfdf dfdg #";
$str1 = "# abc # ";
echo trim($str).'
'; // "dfdf dfdg #"
echo trim($str,' #').'
'; // "dfdf dfdg"
echo trim($str,'# ').'
'; // "dfdf dfdg"
echo trim($str1).'
'; // "# abc #"
echo trim($str1,'#').'
'; // " abc # "
echo trim($str1,'# ').'
'; // "abc"
echo trim($str1,' #').'
'; // "abc"
转义、还原字符串数据:
手动转义、还原:自己手动添加、删除 ‘\’
自动转义:使用addslashes()和stripslashes()
$str = "asdf\"ghjkl\"qwe";
echo stripcslashes($str); //"asdf"ghjkl"qwe"
// addslashes($str)字符串为 "asdf\\\"ghjkl\\\"qwe"
// 在所有的 \ 和 " 前面都添加一个 \
echo addslashes($str); //"asdf\"ghjkl\"qwe"
echo stripcslashes($str); //"asdf"ghjkl"qwe"
addcslashes()和stripcslashes()对指定范围内的字符串进行转义、还原
string addcslashes(string str, string charlist);
string stripcslashes(string str, string charlist);
在charlist中,包含的\n、\r等字符,将以C语言风格转换,而其他非字母数字且ASCII码低于32或高于126的字符均转换成八进制表示。
获取字符串长度: strlen(); 汉子占两个字符 $len = strlen($str);
截取字符串: PHP预定义函数substr(),特别中文截取乱码的问题
string substr(string str, int start [, int length]);
start: 指定开始截取的位置,如果W为负数,则从字符串的末尾开始截取
length: 可选,指定截取字符个数,如果为负,表示截取到倒数第length个字符
start、length全为负数没有结果
$str = "asdfghjkl";
echo substr($str,1,5).'
'; //sdfgh
echo substr($str,1,-5).'
'; //sdf
echo substr($str,-3,5).'
'; //jkl 到字符串结尾提前结束了
比较字符串:
按字节进行字符串比较的方法有两种:strcmp()和strcasecmp()(不区分大小写),函数返回小于0、等于0、大于0三种结果
按自然排序法进行字符串的比较:strnatcmp(), 比较字符串中的数字部分 strnatcasecmp()不区分大小写,有意思吗?数字还有大小写?
echo strnatcmp("qwe1023sf","wrer34"); // -1
// 1023中第一个数字是1 比34中3小
从指定字符串位置开始比较: int strncmp($str1,$str2,int len); len指定每个字符串参与比较的字符数量
字符串检索: