程序中大部分数据是字符序列或字符串!
引用字符串常量
变量插值
当用双引号或heredoc定义字符串字面量时,字符串服从变量插值规则。即在字符串中用变量的值来替换变量的名。
echo "$who was $where";
echo "You are the {$n}th person";
单引号扩起来的字符串
不解析,只接受两个转义序列 \’ 和 \ \ 。
双引号扩起来的字符串
转义序列
符号 | 转义 |
---|---|
\” | 双引号 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\ | 反斜杠 |
$ | 美元符号 |
{ | 左大括号 |
} | 右大括号 |
[ | 左中括号 |
] | 右中括号 |
\0 至 \777 | 用八进制数表示ASCII码 |
\x0 至 \xFF | 用十六进制数表示ASCII码 |
未知转义序列,如\c将被忽略。
here文档
$dialogu = <<< Anywords
aaa
bbb
Anywords;
空白被保留,结尾终止符前字符串会被移除。
输出字符串
echo
echo结构把字符串输出到PHP生成的HTML页面中。
echo "Printy";
echo "First", "Second", "Third";
print()
print()函数发送一个值(它的参数)给浏览器。可判断。
printf()
通过替换模板中的值(格式化字符串)所生成的字符串进行输出。
参数1:格式字符串。
参数2:要替换进来的值。
格式字符串中的替换:%+格式修饰符+类型说明符。
注:%%得到百分号。
格式修饰符顺序
填充说明符+正负号+字符最小数目+浮点精确度。
填充说明符:0,空白符,单引号 ’ 前缀字符。(默认使用空白符填充)
正负号:字符串,-强制左对齐;数字,+强制正数与+一起打印。
字符最小数目:如果小于此数,将根据 填充说明符 与 正负号 进行填充。
浮点精确度:.+数字,小数点后多少位被显示。
类型说明符
说明符 | 参数 | 显示 |
---|---|---|
% | 显示% | |
b | 整数 | 二进制数 |
c | 整数 | 值对应的字符 |
d | 整数 | 十进制数 |
e | 双精度数 | 科学计数法 |
E | 双精度数 | 科学计数法,所有字母大写 |
f | 浮点数 | 当前语言环境格式显示 |
F | 浮点数 | 格式不变 |
g | 双精度数 | 科学计数法 或 浮点数,使用短的 |
G | 双精度数 | 大写科学计数法 或浮点数,短风格 |
o | 整数 | 八进制 |
s | 字符串 | 不变 |
u | 无符号整数 | 十进制 |
x | 整数 | 小写十六进制 |
X | 整数 | 大写十六进制 |
sprintf:赋值不打印。
print_r() 和 var_dump()
print_r()
字符串和数字直接打印,数组以键值对的列表形式出现,以Array开头。
$a = array('name' => 'Fred', 'age' => 35, 'wife' = 'Wilma');
print_r($a);
Array
(
[name] => Fred
[age] => 35
[wife] => Wilma)
注:在数组中使用print_r()将移动内部的迭代器指针到数组的最后一个元素的位置。
对象以Object开头。
class P
{
var $name = 'nat';
}
$p = new P;
print_r($p);
Object
(
[name] => nat)
print_r(true); // "1"
print_r(false); // ""
print_r(null); // ""
var_dump()
var_dump(true);
var_dump(false);
var_dump(null);
var_dump(array('name' => "Fred", 'age' => 35));
class P
{
var $name = 'Nat';
}
$p = new P;
var_dump($p);
bool(true);
bool(false);
bool(null);
array(2){
["name"] =>
string(4) "Fred"
["age"] =>
int(35)
}
object(p)(1) {
["name"] =>
string(3) "Nat"
}
访问单个字符
$string = 'Hello';
for ($i = 0; $i < strlen($string); $i++) {
print($string{$i});
}
整理字符串
删除空白符号
$trimmed = trim(string [, charlist]);
$trimmed = ltrim(string [, charlist]);
$trimmed = rtrim(string [, charlist]);
默认删除的字符
字符 | ASCII码 | 意义 |
---|---|---|
“” | 0x20 | 空格 |
“\t” | 0x09 | 制表符 |
“\n” | 0x0A | 换行符 |
“\r” | 0x0D | 回车符 |
“\0” | 0x00 | 空字节 |
“\x0B” | 0x0b | 纵向制表符 |
例:
$record = " Fred\t35\t \n";
$record_target = "Fred\t35\t";
$record = trim($record, " \r\n\0\x0B");
$this->assertEquals($record_target, $record);
改变大小写
函数 | 返回值 |
---|---|
strtolower() | 全部小写 |
strtoupper() | 全部大写 |
ucfirst() | 首字符大写 |
ucwords() | 每个单词首字符大写 |
编码和转义
HTML、Web地址(URL)、数据库命令都是字符串,他们要求不同的字符按不同的方法转义。
HTML
HTML特殊字符以实体字符标示。
对所有特殊字符进行实体引用
函数 | 参数 | 返回 |
---|---|---|
htmlentities() | input, [quote_style], [charset] | 将HTML字符转换成对应的实体(空格符除外),包括<,>,&,重音符。 |
参数 | 用途 |
---|---|
quote_style | ‘与”是否转义,ENT_COMPAT(默认)转”,ENT_QUOTES都转,ENT_NOQUOTES都不转 |
charset | 字符集,默认ISO-8859-1 |
只对HTML语法字符实体引用
函数:htmlspecialchars()
参数:同htmlentities()
实体 | 转换 |
---|---|
& | & |
“ | " |
‘ | ' |
< | < |
> | > |
例:
$source = "aa <p> bb. </p>";
$result = htmlspecialchars($source);
echo $source; // aa bb.
echo $result; // aa <p> bb. </p> <p>没被解析,直接在html页面显示了出来
实体转换回原始文本
htmlspecialchars_decode()
删除HTML标签
strip_tags()
第二个参数为保留标签,例如 ‘< b>’。
提取元标签
获得元标签数组。
$metaTages = get_meta_tags('http://www.example.com');
echo $metaTags['author'];
$array = get_meta_tags(filename [, use_include_path]);
URL
只应编码协议与域名后的URL。
RFC 3986 编码和解码
$output = rawurlencode($input);
$decode = rawurldecode($encoded);
空格编码为%20 .
查询字符串编码
urlencode();
urldecode();
空格编码为+,通过表单或cookie传送时会自动解码,常用于生成查询字符串。