php变量函数(转)

 

PHP中的变量函数(Variable Functions)

debug_zval_dump — Dumps a string representation of an internal zend value to output
doubleval — 获取参数的浮点值部分,是floatval()函数的别名
empty — 检测变量的值是否为空
floatval — 获取参数的浮点值部分
get_defined_vars — 返回所有已定义的变量
get_resource_type — 获取资源的类型
gettype — 获取变量的类型
import_request_variables — 将GET/POST/Cookie变量导入到全局作用域中
intval — 获取参数的整数部分
is_array — 检测对象是否是一个数组
is_bool — 检测对象是否是布尔类型
is_callable — 检测参数是否为合法的可调用结构
is_double — 检测对象是否浮点数,是is_float()的别名
is_float — 检测对象是否浮点数
is_int — 检测对象是否是整数
is_integer — 检测对象是否是整数,是is_int() 的别名
is_long — 检测对象是否是整数,是is_int() 的别名
is_null — 检测对象是否是NULL
is_numeric — 检测一个对象是否是数字或者数字形式的字符串
is_object — 检测对象是否是一个对象类型
is_real — 检测对象是否浮点数,是is_float() 的别名
is_resource — 检测对象是否是资源类型
is_scalar — 检测对象是否是数字或者字符串
is_string — 检测对象是否是字符串
isset — 检测变量是否已设置
print_r — 将数组,对象格式化成易于理解的格式信息
serialize — 对变量序列化
settype — 设置(改变)变量的类型
strval — 获取参数的字符串值
unserialize — 对变量反序列化
unset — 释放一个变量
var_dump — 打印变量的相关信息
var_export — 输出或返回一个变量的字符串表示

is_string()函数的作用是检测对象是否是字符串。is_int()函数的作用是检测对象是否是整数。is_integer()函数和 is_long()函数的作用和is_int()函数相同,是is_int()函数的别名。is_float()函数的作用是检测对象是否浮点数, is_double()函数和is_real()函数的作用和is_float()函数相同,是is_float()函数的别名。is_array()函 数的作用是检测对象是否是一个数组。is_bool()函数的作用是检测对象是否是布尔类型。is_null()函数的作用是检测对象是否是NULL。 is_object()函数的作用是检测对象是否是一个对象类型。is_resource()函数的作用是检测对象是否是资源类型(资源类型是一种特殊类 型变量,保存了到外部资源的一个引用)。

<?php
echo is_string ( " string " ) ; // 显示 1
echo is_int ( 100 ) ; // 显示 1
echo is_float ( 100 ) ; // 无显示
echo is_float ( 100.34 ) ; // 显示 1
echo is_array ( array ( " apple " , " orange " )) ; // 显示 1
echo is_bool ( true ) ; // 显示 1
echo is_null ( NULL ) ; // 显示 1
$obj = ( object ) ' ciao ' ;
echo is_object ( $obj ) ; // 显示 1
$dir = opendir ( " / " ) ;
echo is_resource ( $dir ) ; // 显示 1
?>

is_numeric()函数的作用是检测一个对象是否是数字或者数字形式的字符串。

<?php
echo is_numeric ( 3.23 ) ; // 显示 1
echo is_numeric ( " 3.23 " ) ; // 显示 1
echo is_numeric ( " 3.23e3 " ) ; // 显示 1
?>

is_scalar()函数的作用是检测对象是否是数字或者字符串。

<?php
echo is_scalar ( 12.3 ) ; // 显示 1
echo is_scalar ( " string " ) ; // 显示 1
echo is_scalar ( array ( " one " )) ; // 不显示
?>

is_callable()的作用是检测参数是否为合法的可调用结构,使用方法不明。

empty()函数的大作用是检测变量的值是否为空。isset()函数的作用是检测变量是否已设置。两个函数的具体使用区别可参照此表,此表摘自手册。唯一要注意的是字符串“0”被empty()函数认为是空的。

表达式gettype()empty()is_null()isset()boolean:if($x)
$x = "";stringTRUEFALSETRUEFALSE
$x = NULLNULLTRUETRUEFALSEFALSE
var $x;NULLTRUETRUEFALSEFALSE
$x is undefinedNULLTRUETRUEFALSEFALSE
$x = array();arrayTRUEFALSETRUEFALSE
$x = false;booleanTRUEFALSETRUEFALSE
$x = true;booleanFALSEFALSETRUETRUE
$x = 1;integerFALSEFALSETRUETRUE
$x = 42;integerFALSEFALSETRUETRUE
$x = 0;integerTRUEFALSETRUEFALSE
$x = -1;integerFALSEFALSETRUETRUE
$x = "1";stringFALSEFALSETRUETRUE
$x = "0";stringTRUEFALSETRUEFALSE
$x = "-1";stringFALSEFALSETRUETRUE
$x = "php";stringFALSEFALSETRUETRUE
$x = "true";stringFALSEFALSETRUETRUE
$x = "false";stringFALSEFALSETRUETRUE

intval()函数的作用是获取参数的整数部分,第二个参数表示该数字所基于的进制,默认为10进制,返回值将自动转换成10进制的形式。 floatval()函数的作用是获取参数的浮点值部分。doubleval ()函数的作用和使用方法和floatval()函数完全相同,是floatval()函数的别名。strval()函数的作用是获取参数的字符串值。 strval()函数的用处让我费解,类型转换?

<?php
echo intval ( " 1F " , 16 ) ; // 显示 1
echo intval ( " 112SDF " ) ; // 显示 112
echo floatval ( ' 122.34343The ' ) ; // 显示 122.34343
echo strval ( " THE123 " ) ; // 显示 THE123
?>

gettype()函数的作用是获取变量的类型,可能返回的类型有:boolean、integer、double(由于历史原因,如果是浮点数则 返回“double”,而不是“float”)、string、array、object、resource、NULL、unknown type。settype()函数的作用是设置(改变)变量的类型,可设置的类型为:boolean、integer、float、string、 array、object、null。settype()函数的第一个参数必须为变量。

<?php
echo gettype ( 3.7 ) ; // 显示 double
 
$var = array ( " time " ) ;
settype ( $var , " object " ) ;
print_r ( $var ) ; // 显示 stdClass Object ( [0] => time )
 
$foo = " 5bar " ;
settype ( $foo , " integer " ) ;
echo $foo ; // 显示 5
?>
 
get_resource_type()函数的作用是获取资源的类型。
<?php
$dir = opendir ( " / " ) ;
echo get_resource_type ( $dir ) ; // 显示 stream
?>

get_defined_vars()函数的作用是返回所有已定义的变量,返回值为一个数组,包含预定义的和自定义的所有变量。

<?php
print_r ( get_defined_vars ()) ; // 显示一大堆
?>

print_r()函数的作用是将数组,对象格式化成易于理解的格式信息。如果依然觉得混乱,可以加上

使用,print_r()函数和print()函数不同的一点是,print_r()函数的有第二个参数,如果被设置为true,结果将会返回而不是输出。

<pre>
<?php
$result = print_r ( array ( " a " , " b " ) , true ) ; // 显示一大堆
echo $result ;
/* 显示
Array
(
    [0] => a
    [1] => b
)
*/

?>
</pre>

var_dump()函数的作用是打印变量的相关信息。var_dump()函数可以用“,”分隔显示多个变量

<?php
$a = array ( 1 , 2 , array ( " a " , " b " , " c " )) ;
var_dump ( $a ) ;
/* 显示
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}
*/

 
$b = 3.1 ;
$c = TRUE ;
var_dump ( $b , $c ) ;
/* 显示
float(3.1)
bool(true)
*/

?>

var_export()函数的作用是输出或返回一个变量的字符串表示,var_export()函数和var_dump()函数类似,区别是其返回的表示是合法的 PHP 代码,var_export()函数设置为true时,将返回而不是显示内容。

<?php
$a = array ( 1 , 2 , array ( " a " , " b " , " c " )) ;
var_export ( $a ) ;
/* 显示
array (
  0 => 1,
  1 => 2,
  2 =>
  array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
  ),
)
*/

$b = 3.1 ;
$v = var_export ( $b , TRUE ) ;
echo $v ;
/* 显示
3.1
*/

?>

unset()函数的作用是释放一个变量,unset()函数没有任何返回值,如果在函数中unset()一个全局变量,则不会影响全局变量在全局 范围内的使用;如果unset()一个静态变量,也不会让静态变量在全局范围内受影响;如果需要在函数中unset()一个全局变量,可使用$ GLOBALS数组来实现。

<?php
function destroy_foo () {
    
global $foo ;
    
unset ( $foo ) ;
}
$foo = ' bar ' ;
destroy_foo () ;
echo $foo ; // 显示 bar
 
function foo () {
    
static $a ;
    
$a ++;
    
echo " $a /n " ;
    
unset ( $a ) ;
}
foo () ; // 显示 1
foo () ; // 显示 2
foo () ; // 显示 3
 
function foo () {
    
unset ( $GLOBALS [ ' bar ' ]) ;
}
 
$bar = " something " ;
foo () ;
echo $bar ; // 什么也不显示
?>

serialize()函数的作用是对变量序列化,目的是使其能被存储。unserialize()函数的作用和serialize()函数正好相 反,可以将一个经serialize()函数序列化以后的值进行反序列化。序列化可以作用于资源类型(resource)之外的任何类型,在对对象 (object)进行serialize()时,会自动调用__sleep()成员函数,同样在unserialize()时,会自动调用 __wakeup()成员函数。unserialize()函数有第二个参数,具体使用方法略。

<?php
$arr = array ( " a " , " b " ) ;
$ser = serialize ( $arr ) ;
echo $ser ; // 显示 a:2:{i:0;s:1:"a";i:1;s:1:"b";}
 
$str = ' a:2:{i:0;s:1:"a";i:1;s:1:"b";} ' ;
$arr2 = unserialize ( $str ) ;
print_r ( $arr2 ) ;
/* 显示
(
    [0] => a
    [1] => b
)
*/

?>

import_request_variables()函数的作用是将GET/POST/Cookie变量导入到全局作用域中,如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。第一个参数表示需要导入的类型,字母‘G’、‘P’和‘C’分别表示 GET、POST 和 Cookie,注意在使用时,后一个同名变量会覆盖前一个。第二个参数可以给这些变量设置一个共用的变量名前缀。

debug_zval_dump()函数的作用我搞不明白。

PHP中的数组函数(Array Functions)

星期一, 3月 19th, 2007

PHP有74个和数组处理相关的函数,先给出一个总表:
array_change_key_case — 转变数组中所有键值的大小写形式
array_chunk — 将一个数组拆成多个小单元
array_combine — 用一个数组的值作为其键名,另一个数组的值作为其值的方法来创建数组
array_count_values — 统计数组中的值出现的次数
array_diff_assoc — 根据值和键值计算若干个数组相对于第一个数组参数的差集
array_diff_key — 根据键值计算若干个数组相对于第一个数组参数的差集
array_diff_uassoc –根据值和键值计算若干个数组相对于第一个数组参数的差集,可使用回调函数对键值进行比较
array_diff_ukey — 根据键值计算若干个数组相对于第一个数组参数的差集,可使用回调函数比较键名
array_diff — 根据值来计算若干个数组相对于第一个数组参数的差集
array_fill — 用给定的值填充数组
array_filter — 使用回调函数对数组进行过滤操作
array_flip — 交换数组中的键和值
array_intersect_assoc — 根据值和键值来计算数组的交集
array_intersect_key — 根据键值比较计算数组的交集
array_intersect_uassoc — 根据值和键值来计算数组的交集,可使用回调函数对键值进行比较
array_intersect_ukey — 根据键值比较计算数组的交集,可使用回调函数比较键名
array_intersect — 根据值来计算数组的交集
array_key_exists — 检查给定的键名是否存在于数组中
array_keys — 返回数组中所有的键名
array_map — 对数组中的每个元素应用回调函数后返回结果
array_merge_recursive — 用来处理多维数组的合并
array_merge — 重排单个数组的键值或者合并两个数组
array_multisort — 对多个数组进行排序,或者对多维数组进行排序
array_pad — 用值将数组填补到指定长度
array_pop — 将数组的最后一个单元弹出
array_product — 得出数组所有单元值的乘积
array_push — 将一个或多个单元添加到数组的末尾
array_rand — 从数组中随机取出一个或多个单元的键名
array_reduce — 对数组中的每个元素应用一个回调函数
array_reverse — 返回一个和原来数组相反的数组
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_shift — 将数组的第一个单元移出并作为结果返回
array_slice — 截取出数组中的一段
array_splice — 将一个数组中的部分截取并替换
array_sum — 得出数组所有值的和
array_udiff_assoc — 根据值和键值来计算数组的交集,可使用回调函数比较值
array_udiff_uassoc — 根据值和键值来计算数组的交集,可使用回调函数比较值
array_udiff — 根据值来计算若干个数组相对于第一个数组参数的差集,可使用回调函数比较值
array_uintersect_assoc — 根据值和键值来计算数组的交集,可使用回调函数对值进行比较
array_uintersect_uassoc — 根据值和键值来计算数组的交集,可使用回调函数对值和键值进行比较
array_uintersect — 根据值来计算数组的交集,可使用回调函数比较值
array_unique — 移除数组中重复的值
array_unshift — 将传入的单元插入到数组的开头
array_values — 返回数组中所有的值
array_walk_recursive — 对数组中的每个元素递归的应用一个回调函数
array_walk — 对数组中的每个元素应用一个回调函数
array — 新建一个数组
arsort — 对数组进行反向,保留键值的排序
asort — 对数组进行保留键值的排序
compact — 将变量转变为数组
count — 计算数组的个数
current — 返回数组的当前单元
each — 返回数组当前指针所在单元的键值和值,并将指针指向下一个单元
end — 将指针指向数组的最后一个单元
extract — 将一个数组的键值作为变量名,将数组的值作为变量的值进行批量赋值
in_array — 检查数组中是否存在某个值
key — 返回当前指针所在数组单元的键名
krsort — 将数组按键名进行反向排序
ksort — 将数组按键名进行排序
list — 将数组的值赋给一些变量
natcasesort — 使用“自然排序”法对数组排序,比较时不区分大小写
natsort — 使用“自然排序”法对数组排序
next — 将指针指向数组的下一个单元
pos — 返回数组的当前单元,是current() 的别称
prev — 将指针指向数组的上一个单元
range — 建立一个包含指定范围单元的数组
reset — 将指针指向数组的第一个单元
rsort — 对数组进行反向排序
shuffle — 将数组打乱,并重建键名
sizeof — 计算数组的个数,作用和count()函数完全相同
sort — 对数组进行排序
uasort — 使用回调函数对数组进行保留键值的排序
uksort — 使用回调函数对数组按键名进行排序
usort — 使用回调函数对数组进行排序

array()函数的作用是创建一个数组。如果省略了索引,会自动产生从 0 开始的整数索引。如果索引是整数,则下一个产生的索引将是目前最大的整数索引 + 1。注意如果定义了两个完全一样的索引,则后面一个会覆盖前一个。array()函数的最后一项后面可以添加一个“,”,但不起任何作用。

<?php
$array = array ( 1 , 1 , 1 , 1 1 , 8 => 1 4 => 1 , 19 , 3 => 13 , ) ;
print_r ( $array ) ;
/* 显示
Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 13
    [4] => 1
    [8] => 1
    [9] => 19
)
*/

?>

range()函数的作用是建立一个包含指定范围单元的数组,range()函数的第一个参数表示开始单元的值,第二个参数表示最后一个单元的值, 第三个参数表示值的跨度,第三个参数的默认值为1。第一第二个参数如果输入了字符串,将会截取第一个字母,建立字母为值的数组。

<?php
$number = range ( 100 , 0 , 20 ) ;
print_r ( $number ) ;
/* 显示
Array
(
    [0] => 100
    [1] => 80
    [2] => 60
    [3] => 40
    [4] => 20
    [5] => 0
)
*/

$number = range ( " g " , " a " , 2 ) ;
print_r ( $number ) ;
/* 显示
Array
(
    [0] => g
    [1] => e
    [2] => c
    [3] => a
)
*/

?>

compact()函数可以将变量转变为数组,$key为变量的名称,$value为变量的值。compact()函数的操作可以通过数组递归地完成。

<?php
$name = " Bom " ;
$result = compact ( " name " ) ;
print_r ( $result ) ; // 显示 Array ( [name] => Bom )
 
$name = " Bom " ;
$age = 25 ;
$city = " shanghai " ;
$result = compact ( array ( " name " , " age " , " city " )) ;
print_r ( $result ) ;
/* 显示
Array
(
    [name] => Bom
    [age] => 25
    [city] => shanghai
)
*/

?>

extract()函数的作用是将一个数组的键值作为变量名,将数组的值作为变量的值进行批量赋值,extract()函数的第二个参数有8个常量 参数可以选择:EXTR_OVERWRITE:如果有冲突,覆盖已有的变量;EXTR_SKIP:如果有冲突,不覆盖已有的变量; EXTR_PREFIX_SAME:如果有冲突,在变量名前加上第三个参数作为前缀;EXTR_PREFIX_ALL:给所有变量名前加上第三个参数作为 前缀;EXTR_PREFIX_INVALID:仅在非法/数字的变量名前加上第三个参数作为前缀;EXTR_IF_EXISTS:仅在当前已有同名变量 时,覆盖它们的值;EXTR_PREFIX_IF_EXISTS:仅在当前已有同名变量时,建立第三个参数作为前缀;EXTR_REFS:将变量作为引用 提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。在需要的情况下,会使用第三个参数作为新变量名的前缀。

<?php
$size = " large " ;
$var_array = array ( " color " => " blue " ,
                  
" size "   => " medium " ,
                  
" shape " => " sphere " ) ;
extract ( $var_array , EXTR_PREFIX_SAME , " wddx " ) ;
echo " $color , $size , $shape , $wddx_size " ;
// 显示 blue, large, sphere, medium
?>

array_combine()函数的作用是用一个数组的值作为其键名,另一个数组的值作为其值的方法来创建数组。

<?php
$a = array ( ' green ' , ' red ' , ' yellow ' ) ;
$b = array ( ' avocado ' , ' apple ' , ' banana ' ) ;
$c = array_combine ( $a , $b ) ;
print_r ( $c ) ;
/* 显示
Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)
*/

?>

array_merge()函数的作用是重排单个数组的键值或者合并两个数组。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新 索引,字符键值不会受影响。如果有两个以上的参数,则进行数组合并的操作,如果数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值,如果是相同的 数字键名,后面的值将会附加到原来的值后面。

<?php
$a = array ( 4 => ' green ' , 6 => ' red ' , ' fruit ' => ' yellow ' ) ;
$a = array_merge ( $a ) ;
print_r ( $a )
/* 显示
Array
(
    [0] => green
    [1] => red
    [fruit] => yellow
)
*/

 
$a = array ( 4 => ' green ' , 6 => ' red ' , ' fruit ' => ' yellow ' ) ;
$b = array ( 4 => ' greens ' , 6 => ' reds ' , ' fruit ' => ' yellows ' ) ;
$a = array_merge ( $a , $b ) ;
print_r ( $a )
/* 显示
Array
(
    [0] => green
    [1] => red
    [fruit] => yellows
    [2] => greens
    [3] => reds
)
*/

?>

array_merge_recursive()函数的处理方式和array_merge()函数类似,但是array_merge_recursive()函数可以用来处理多维数组的合并。

<?php
$ar1 = array ( " color " => array ( " favorite " => " red " ) , 5 ) ;
$ar2 = array ( 10 , " color " => array ( " favorite " => " green " , " blue " )) ;
$result = array_merge_recursive ( $ar1 , $ar2 ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )
            [0] => blue
        )
    [0] => 5
    [1] => 10
)
*/

?>

count()函数的作用是计算数组的个数。count()函数的第二个参数如果被设置为常量COUNT_RECURSIVE,将会递归地去计算数组的个数。sizeof()函数的作用和count()函数的作用完全相同

<?php
$food = array (
    
' fruits ' => array ( ' orange ' , ' banana ' , ' apple ' ) ,
    
' veggie ' => array ( ' carrot ' , ' collard ' , ' pea ' )
) ;
 
echo count ( $food , COUNT_RECURSIVE ) ; // 显示 8
echo count ( $food ) ; // 显示 2
?>

array_count_values()函数的作用统计数组中的值出现的次数。

<?php
$array = array ( 1 , " hello " , 1 , " world " , " hello " ) ;
print_r ( array_count_values ( $array )) ;
/* 显示
Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
*/

?>

array_values()函数的作用是返回所有元素的值。

<?php
$array = array ( " size " => " XL " , " color " => " gold " ) ;
print_r ( array_values ( $array )) ;
/* 显示
Array
(
    [0] => XL
    [1] => gold
)
*/

?>

array_keys()函数的作用是返回数组的键名,如果设置了第二个参数,则可以返回指定值的单元的键值,第三个参数设置为true是,可以让第二个参数进行“===”的比较。

<?php
$array = array ( " blue " , " red " , " green " , " blue " , " blue " ) ;
print_r ( array_keys ( $array , " blue " )) ;
/* 显示
Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)
*/

?>

array_key_exists()函数的作用是检查给定的键名是否存在于数组中。

<?php
$
array = array ( ' first ' => 1 , ' second ' => 4 ) ;
echo array_key_exists ( ' first ' , $ array ) ; // 显示 1
?>

下面这个例子说明array_key_exists()函数和isset()函数在检测时候的微小区别,就是在对null的处理上。

<?php
$search_array = array ( ' first ' => null , ' second ' => 4 ) ;
isset ( $search_array [ ' first ' ]) ; // 返回false
array_key_exists ( ' first ' , $search_array ) ; // 返回true
?>

in_array()函数的作用是检查数组中是否存在某个值,比较同时检查键值和值。比较是区分大小写的。第三个参数设置为true时,匹配将会通过“===”来进行。

<?php
$a = array ( ' o ' , array ( ' c ' => ' p ' , ' h ' ) , array ( ' p ' , ' r ' )) ;
echo in_array ( array ( ' c ' => ' p ' , ' h ' ) , $a ) ; // 返回true
in_array ( array ( ' f ' , ' i ' ) , $a ) ; // 返回false
in_array ( ' o ' , $a ) ; // 返回true
?>

array_sum()函数的作用是得出数组所有单元值的和,字符串单元会被自动转换成0。

<?php
$b = array ( " a " => 1.2 , " b " => 2.3 , " c " => 3.4 , " d " => " string " ) ;
echo array_sum ( $b ) ; //显示 6.9
?>

array_product()函数的作用是得出数组所有单元值的乘积,字符串单元会被自动转换成0。

<?php
$a = array ( 2 , 4 , 6 , 8 ) ;
echo array_product ( $a ) ; //显示 384
?>

array_shift()函数的作用是将数组的第一个单元移出并作为结果返回,将数组的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。

<?php
$stack = array ( 7 => " orange " , 8 => " banana " , 9 => " apple " ) ;
$fruit = array_shift ( $stack ) ;
print_r ( $stack ) ;
/* 显示
Array
(
    [0] => banana
    [1] => apple
)
*/

echo $fruit ; // 显示 orange
?>

array_unshift()函数的作用是将传入的单元插入到数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

<?php
$queue = array ( " orange " , " banana " ) ;
array_unshift ( $queue , " apple " , " raspberry " ) ;
print_r ( $queue ) ;
/* 显示
Array
(
    [0] => apple
    [1] => raspberry
    [2] => orange
    [3] => banana
)
*/

?>

array_pop()函数的作用是将数组的最后一个单元弹出,并返回被弹出数组元素的值。

<?php
$queue = array ( 7 => " orange " , 8 => " banana " , 9 => " apple " ) ;
$fruit = array_pop ( $queue ) ;
print_r ( $queue ) ;
/* 显示
Array
(
    [7] => orange
    [8] => banana
)
*/

echo $fruit ; // 显示 apple
?>

array_push()函数的作用是将一个或多个单元添加到数组的末尾,并返回数组新的单元总数

<?php
$stack = array ( " orange " , " banana " ) ;
$fruit = array_push ( $stack , " apple " , " raspberry " ) ;
print_r ( $stack ) ;
/* 显示
Array
(
    [0] => orange
    [1] => banana
    [2] => apple
    [3] => raspberry
)
*/

echo $fruit ; // 显示 4
?>

array_slice()函数的作用是截取出数组中的一段,第二个参数表示从第几个元素开始截取,参数小于0时从后向前计算,第三个参数为正数 时,表示截取的长度,为负时,表示截取到末尾的第几个位置,第四个参数设置为true时,函数将保留键值,默认将会重置所有的数字键值。

<?php
$queue = array ( 7 => " orange " , 8 => " banana " , 9 => " apple " , 10 => " pear " ) ;
$fruit = array_slice ( $queue , 1 ,- 1 , true ) ;
print_r ( $fruit ) ;
/* 显示
Array
(
    [8] => banana
    [9] => apple
)
*/

?>

array_splice()函数的作用是将一个数组中的部分截取并替换。第二个参数表示截取的位置,小于0是表示从后往前计数,第三个参数为正时,表示截取的长度,为负时表示从后往前截取到的位置,第四个参数表示从第二个参数表示的位置开始插入内容的数组。

<?php
$input = array ( " red " , " green " , " blue " , " yellow " ) ;
array_splice ( $input , 1 , - 1 ) ;
print_r ( $input ) ; // 显示 array("red", "yellow")
 
$input = array ( " red " , " green " , " blue " , " yellow " ) ;
array_splice ( $input , 1 , count ( $input ) , " orange " ) ;
print_r ( $input ) ; // 显示 array("red", "orange")
 
$input = array ( " red " , " green " , " blue " , " yellow " ) ;
array_splice ( $input , 3 , 0 , " purple " ) ;
print_r ( $input ) ; // 显示 array("red", "green", "blue", "purple", "yellow")
?>

shuffle()函数的作用是将数组打乱,并重建键名。

<?php
$input = array ( " Neok " => " Neo " , " Morpheusk " => " Morpheus " , " Trinityk " => " Trinity " ) ;
$rand_keys = shuffle ( $input ) ;
print_r ( $input ) ;
/*显示类似
Array
(
    [0] => Trinity
    [1] => Neo
    [2] => Morpheus
)
*/

?>

array_rand()函数的作用是从数组中随机取出一个或多个单元的键名。第二个参数表示取出键的数量,省略则默认为1。

<?php
$input = array ( " Neok " => " Neo " , " Morpheusk " => " Morpheus " , " Trinityk " => " Trinity " ) ;
$rand_keys = array_rand ( $input , 2 ) ;
print_r ( $rand_keys ) ; // 显示类似Array ( [0] => Neok [1] => Morpheusk )
?>

array_reverse()函数返回一个和原来数组相反的数组,第二个参数如果设置为TRUE则保留原来的键名。

<?php
$input = array ( " Neok " => " Neo " , " Morpheusk " => " Morpheus " , " Trinityk " => " Trinity " ) ;
$result = array_reverse ( $input ) ;
print_r ( $result ) . " /n " ;
/* 显示
Array
(
    [Trinityk] => Trinity
    [Morpheusk] => Morpheus
    [Neok] => Neo
)
*/

?>

array_flip()函数的作用是交换数组中的键和值,函数要求值能够成为合法的键名,如果同一个值出现了多次,则最后一个键名将作为它的值,其它的将全部丢弃。

<?php
$trans = array ( " a " => 1 , " b " => 1 , " c " => 2 ) ;
$trans = array_flip ( $trans ) ;
print_r ( $trans ) ; // 显示 Array ( [1] => b [2] => c )
?>

array_search()函数的作用是在数组中搜索给定的值,如果成功则返回相应的键名。第三个参数设置为true的时候将使用“===”进行比较,如果同一个值出现多次,则返回第一个匹配的键值。

<?php
$array = array ( 0 => ' blue ' , 1 => ' red ' , 2 => ' green ' , 3 => ' red ' ) ;
echo $key = array_search ( ' green ' , $array ) ; // 显示 2;
echo $key = array_search ( ' red ' , $array ) ;    // 显示 1;
?>

range()函数的作用是建立一个包含指定范围单元的数组,取字符值时候自动截取一位。第三个参数表示数组之间的间距,省略时默认为1。

<?php
print_r ( range ( ' 1 ' , ' 5 ' , ' 2 ' )) ;
/* 显示
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)
*/

print_r ( range ( ' c ' , ' a ' )) ;
/* 显示
Array
(
    [0] => c
    [1] => b
    [2] => a
)
*/

?>

array_fill()函数的作用是用给定的值填充数组,第一个参数表示开始的键值,第二个参数表示数组的长度,第三个参数表示数组的值。

<?php
$a = array_fill ( - 1 , 2 , array ( ' first ' , ' key ' => ' second ' )) ;
print_r ( $a ) ;
/* 显示
Array
(
    [-1] => Array
        (
            [0] => first
            [key] => second
        )
    [0] => Array
        (
            [0] => first
            [key] => second
        )
)
*/

?>

array_pad()函数的作用是用值将数组填补到指定长度,如果第二个参数为正,则数组被填补到右侧,如果为负则从左侧开始填补。原数组里面的数字键值完全重置,字符串键值将保留。

<?php
$input = array ( 12 , 10 , 9 ) ;
$result = array_pad ( $input , - 7 , - 1 ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [0] => -1
    [1] => -1
    [2] => -1
    [3] => -1
    [4] => 12
    [5] => 10
    [6] => 9
)
*/

?>

array_unique()函数的作用是移除数组中重复的值,保留首个出现的值。

<?php
$input = array ( " a " => " green " , " red " , " b " => " green " , " blue " , " red " ) ;
$result = array_unique ( $input ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [a] => green
    [0] => red
    [1] => blue
)
*/

?>

array_intersect()函数的作用是计算若干个数组的交集。比较时不参考键值,但是键值不同时会保留前一个数组的键值。 array_uintersect()函数的作用和array_intersect()函数类似,区别是array_uintersect()函数使用回 调函数来比较。

<?php
$array1 = array ( " a " => " green " , " red " , " blue " ) ;
$array2 = array ( " b " => " green " , " yellow " , " red " ) ;
$result = array_intersect ( $array1 , $array2 ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [a] => green
    [0] => red
)
*/

 
$array1 = array ( " a " => " green " , " b " => " brown " , " c " => " blue " , " red " ) ;
$array2 = array ( " a " => " GREEN " , " B " => " brown " , " yellow " , " red " ) ;
print_r ( array_uintersect ( $array1 , $array2 , " strcasecmp " )) ;
/* 显示
Array
(
    [a] => green
    [b] => brown
    [0] => red
)
*/

?>

array_intersect_key()函数的作用是使用键名比较计算数组的交集,如果值有冲突,则保留第一个数组中的值。 array_intersect_ukey()函数的作用和array_intersect_key()函数类似,区别是 array_intersect_ukey()函数可以使用最后一个参数设定一个回调函数来进行比较。

<?php
$array1 = array ( ' blue '   => 1 , ' red '   => 2 , ' green '   => 3 , ' purple ' => 4 ) ;
$array2 = array ( ' green ' => 1 , ' blue ' => 2 , ' yellow ' => 3 , ' cyan '    => 4 ) ;
$result = array_intersect_key ( $array1 , $array2 ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [blue] => 1
    [green] => 3
)
*/

?>

array_intersect_assoc()函数使用对值和键值的联合比较的方式来计算多个数组的交集。 array_uintersect_assoc()函数,array_intersect_uassoc()函数, array_uintersect_uassoc()函数的作用和array_intersect_assoc()函数类似,区别是 array_uintersect_assoc()函数可以使用一个回调函数对值进行比较。array_intersect_uassoc()函数可以使 用一个回调函数对键值进行比较。array_uintersect_uassoc()函数可以使用两个回调函数同时对值和键值进行比较。

<?php
$array1 = array ( " a " => " green " , " b " => " brown " , " c " => " blue " , " red " ) ;
$array2 = array ( " a " => " green " , " yellow " , " red " ) ;
$result_array = array_intersect_assoc ( $array1 , $array2 ) ;
print_r ( $result_array ) ; // 显示 Array ( [a] => green )
?>

array_diff()函数的作用是根据值来计算若干个数组相对于第一个数组参数的差集。比较时不参考键值。array_udiff()函数的作用和array_intersect()函数类似,区别是array_udiff()函数使用回调函数来比较。

<?php
$array1 = array ( " a " => " green " , " red " , " blue " , " red " ) ;
$array2 = array ( " b " => " green " , " yellow " , " red " ) ;
$result = array_diff ( $array1 , $array2 ) ;
print_r ( $result ) ; // 显示 Array ( [1] => blue )
?>

array_diff_key()函数的作用是根据键值计算若干个数组相对于第一个数组参数的差集。 array_diff_ukey()函数的作用和array_diff_key()函数类似,区别是array_diff_ukey()函数可以使用最后 一个参数设定一个回调函数来进行比较。

<?php
$array1 = array ( ' blue '   => 1 , ' red '   => 2 , ' green '   => 3 , ' purple ' => 4 ) ;
$array2 = array ( ' green ' => 5 , ' blue ' => 6 , ' yellow ' => 7 , ' cyan '    => 8 ) ;
print_r ( array_diff_key ( $array1 , $array2 )) ;
/* 显示
Array
(
    [red] => 2
    [purple] => 4
)
*/

?>

array_diff_assoc()函数的作用是根据值和键值来计算若干个数组相对于第一个数组参数的差集。array_udiff_assoc ()函数,array_diff_uassoc()函数,array_udiff_uassoc()函数的作用和array_diff_assoc()函 数类似,区别是array_udiff_assoc()函数可以使用一个回调函数对值进行比较。array_diff_uassoc()函数可以使用一个 回调函数对键值进行比较。array_udiff_uassoc()函数可以使用两个回调函数同时对值和键值进行比较。

<?php
$array1 = array ( " a " => " green " , " b " => " brown " , " c " => " blue " , " red " ) ;
$array2 = array ( " a " => " green " , " yellow " , " red " ) ;
$result = array_diff_assoc ( $array1 , $array2 ) ;
print_r ( $result ) ;
/* 显示
Array
(
    [b] => brown
    [c] => blue
    [0] => red
)
*/

?>

sort()函数的作用是对数组进行排序,第二个参数有4个常量可选,SORT_REGULAR:正常比较单元(不改变类型); SORT_NUMERIC:单元被作为数字来比较;SORT_STRING:单元被作为字符串来比较;SORT_LOCALE_STRING:根据当前的 locale 设置来把单元当作字符串比较。rsort()函数的使用方法和sort()函数相同,区别是rsort()函数的排序是反向的。asort()函数的使用 方式和sort()函数相同,区别是asort()函数在排序后保留键值。arsort()函数的使用方法和sort()函数相同,区别是arsort ()函数的排序是反向且保留键值的。

<?php
$fruits = array ( " lemon " , " orange " , " banana " , " apple " ) ;
sort ( $fruits ) ;
print_r ( $fruits ) ;
/* 显示
Array
(
    [0] => apple
    [1] => banana
    [2] => lemon
    [3] => orange
)
*/

 
$fruits = array ( " d " => " lemon " , " a " => " orange " , " b " => " banana " , " c " => " apple " ) ;
asort ( $fruits ) ;
print_r ( $fruits ) ;
/* 显示
Array
(
    [c] => apple
    [b] => banana
    [d] => lemon
    [a] => orange
)
*/

?>

ksort()函数的作用是将数组按键名进行排序,第二个参数有4个常量可选,SORT_REGULAR:正常比较单元(不改变类型); SORT_NUMERIC:单元被作为数字来比较;SORT_STRING:单元被作为字符串来比较;SORT_LOCALE_STRING:根据当前的 locale 设置来把单元当作字符串比较。krsort()函数的使用方法和ksort()函数相同,区别是krsort()函数的排序是反向的。

<?php
$fruits = array ( " d " => " lemon " , " a " => " orange " , " b " => " banana " , " c " => " apple " ) ;
ksort ( $fruits ) ;
print_r ( $fruits ) ;
/* 显示
Array
(
    [a] => orange
    [b] => banana
    [c] => apple
    [d] => lemon
)
*/

 
$fruits = array ( " d " => " lemon " , " a " => " orange " , " b " => " banana " , " c " => " apple " ) ;
krsort ( $fruits ) ;
print_r ( $fruits ) ;
/* 显示
Array
(
    [d] => lemon
    [c] => apple
    [b] => banana
    [a] => orange
)
*/

?>

usort()函数的作用是使用回调函数对数组进行排序,uasort()函数的使用方法和usort()函数相同,区别是uasort()函数比 较之后保留键值,uksort()函数的使用方法和usort()函数相同,区别是uksort()函数是对键值进行比较并排序。

<?php
function cmp ( $a , $b )
{
    
return strcmp ( $a , $b ) ;
}
$fruits = array ( " lemons " , " apples " , " grapes " ) ;
usort ( $fruits , " cmp " ) ;
print_r ( $fruits ) ;
/* 显示
Array
(
    [0] => apples
    [1] => grapes
    [2] => lemons
)
*/

?>

natsort()函数的作用是使用“自然排序”法对数组排序,natcasesort()函数的作用和natsort()函数相同,区别是natcasesort()函数在比较是不区分大小写。

<?php
$array = array ( " img12.png " , " img10.png " , " img2.png " , " img1.png " ) ;
natsort ( $array ) ;
print_r ( $array ) ;
/* 显示
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)
*/

?>

array_multisort()函数的作用是对多个数组进行排序,或者对多维数组进行排序,排序后字符串键名保持不变,但数字键名会被重新索 引。array_multisort()函数的参数形式非常古怪,规则是在每个数组参数后面,可以任意跟随两种形式的常量参数:第一种:排序顺序标志, SORT_ASC - 按照上升顺序排序,SORT_DESC - 按照下降顺序排序;第二种:排序类型标志,SORT_REGULAR - 将项目按照通常方法比较,SORT_NUMERIC - 将项目按照数值比较,SORT_STRING - 将项目按照字符串比较。

<?php
$ar = array (
      
array ( " 10 " , 11 , 100 , 100 , " a " ) ,
      
array (     1 2 , " 2 " ,    3 ,    1 )
      
) ;
array_multisort ( $ar [ 0 ] , SORT_ASC , SORT_STRING ,
                
$ar [ 1 ] , SORT_NUMERIC , SORT_DESC ) ;
print_r ( $ar ) ;
/* 显示
Array
(
    [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => 11
            [4] => a
        )
    [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 2
            [4] => 1
        )
)
*/

?>

current()函数的作用是返回数组的当前单元,pos()函数的作用和current()函数相同,是current()函数的别称, next()函数的作用是将指针指向数组的下一个单元,prev()函数的作用是将指针指向数组的上一个单元,end()函数的作用是将指针指向数组的最 后一个单元,reset()函数的作用是将指针指向数组的第一个单元,key()函数的作用是返回当前指针所在数组单元的键名。

<?php
$transport = array ( ' foot ' , ' bike ' , ' car ' , ' plane ' ) ;
echo $mode = next ( $transport ) ;    // 显示 'bike';
echo $mode = current ( $transport ) ; // 显示 = 'bike';
echo $mode = prev ( $transport ) ;    // 显示 = 'foot';
echo $mode = end ( $transport ) ;      // 显示 = 'plane';
echo $mode = key ( $transport ) ;    // 显示 3
echo $mode = reset ( $transport ) ; // 显示 = 'foot';
?>

each()函数的作用是返回数组当前指针所在单元的键值和值,并将指针指向下一个单元,返回的数组有4个单元。

<?php
$foo = array ( " Robert " => " Bob " , " Seppo " => " Sepi " ) ;
next ( $foo ) ;
$bar = each ( $foo ) ;
print_r ( $bar ) ;
/* 显示
Array
(
    [1] => Sepi
    [value] => Sepi
    [0] => Seppo
    [key] => Seppo
)
*/

?>

list()函数的作用是将数组的值赋给一些变量。list()函数会从最左侧的变量开始赋值,在某些给出键值的数组赋值时,要注意顺序。

<?php
$info = array ( ' coffee ' , ' brown ' , ' caffeine ' ) ;
list ( $drink , $color , $power ) = $info ;
echo $power ; // 显示 caffeine
 
$info = array ( ' coffee ' , ' brown ' , ' caffeine ' ) ;
list ( $a [ 0 ] , $a [ 1 ] , $a [ 2 ]) = $info ;
print_r ( $a ) ;
/* 显示
Array
(
    [2] => caffeine
    [1] => brown
    [0] => coffee
)
*/

?>

array_map()函数的作用是对数组中的每个元素应用回调函数后返回结果。array_map()函数的第一个参数如果设置为“NULL”,则可以用一种有趣的方式来合并多个数组。

<?php
function cube ( $n )
{
    
return ( $n * $n * $n ) ;
}
 
$a = array ( 1 , 2 , 3 , 4 , 5 ) ;
$b = array_map ( " cube " , $a ) ;
print_r ( $b ) ;
/* 显示
Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)
*/

 
$a = array ( 1 , 2 , 3 ) ;
$b = array ( " one " , " two " , " three " ) ;
$c = array ( " uno " , " dos " , " tres " ) ;
$d = array_map ( null , $a , $b , $c ) ;
print_r ( $d ) ;
/* 显示
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )
    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => dos
        )
    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => tres
        )
)
*/

?>

array_walk()函数的作用是对数组中的每个元素应用一个回调函数,回调函数中的第一个参数表示数组单元的值,第二个参数表示数组单元的键 值,第三个参数可以由array_walk()函数的第三个参数传递,使用引用:“&”可以对数组元素进行批量的修改。 array_walk_recursive()函数的使用方法和array_walk()函数一样,区别是array_walk_recursive() 函数会递归的作用于多维数组的所有单元。
注:没法对$key同时使用“&”,有点遗憾。

<?php
$fruits = array ( " d " => " lemon " , " a " => " orange " , " b " => " banana " , " c " => " apple " ) ;
function test_alter ( & $item1 , $key , $prefix )
{
    
$item1 = " $prefix : $item1 " ;
}
array_walk ( $fruits , ' test_alter ' , ' fruit ' ) ;
print_r ( $fruits ) ;
/*
Array
(
    [d] => fruit: lemon
    [a] => fruit: orange
    [b] => fruit: banana
    [c] => fruit: apple
)
*/

?>

array_filter()函数的作用是使用回调函数对数组进行过滤操作,所有返回为TRUE的数组单元都会被返回,无论是字符串键名还是数字键名,都保留不变。第二个参数如果省略,函数将会删去数组中所有值为false的单元。

<?php
function odd ( $var )
{
    
return ( $var % 2 == 1 ) ;
}
$array1 = array ( " a " => 1 , " b " => 2 , " c " => 3 , " d " => 4 , " e " => 5 ) ;
print_r ( array_filter ( $array1 , " odd " )) ;
/* 显示
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
*/

 
$entry = array (
    
0 => ' foo ' ,
    
1 => false ,
    
2 => - 1 ,
    
3 => null ,
    
4 => ''
) ;
print_r ( array_filter ( $entry )) ;
/* 显示
Array
(
    [0] => foo
    [2] => -1
)
*/

?>

array_reduce()函数的作用是对数组中的每个元素应用一个回调函数,第三个参数如果提供,将作用数组多出来的第一个元素。回调函数的第一个参数起到一个静态变量的作用,第二个参数表示数组的值,数组的键值则被丢弃。

<?php
function rsum ( $v , $w )
{
    
$v .= $w ;
    
return $v ;
}
$a = array ( ' apple ' => 1 , 2 , 3 , 4 , 5 ) ;
echo $c = array_reduce ( $a , " rsum " , 10 ) ; // 显示 1012345
?>

array_change_key_case()函数的作用是转变数组中所有键值的大小写形式。第二个参数是一个常量参数:CASE_UPPER和 CASE_LOWER,CASE_UPPER表示转换成大小,CASE_LOWER表示转换为小写,省略时默认值是CASE_LOWER,如果在转变后出 现键值的重复,后一个数组单元的值将覆盖前一个。

<?php
$input_array = array ( " FirSt " => 1 , " SecOnd " => 4 ) ;
print_r ( array_change_key_case ( $input_array , CASE_UPPER )) ;
/* 显示
Array
(
    [FIRST] => 1
    [SECOND] => 4
)
*/

?>

array_chunk()函数的作用是将一个数组拆成多个小单元,第二个参数表示每个小单元的数组个数,第三个可选参数,如果值为TRUE,则保留数组原来的键值,默认为false

<?php
$input_array = array ( ' a ' , ' b ' , ' c ' , ' d ' , ' e ' ) ;
print_r ( array_chunk ( $input_array , 2 , true )) ;
/*
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [2] => c
            [3] => d
        )
    [2] => Array
        (
            [4] => e
        )
)
*/

?>

PHP5的正则表达式(未完成)

星期二, 3月 13th, 2007

简介

正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本 内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由 Unix中的工具软件(例如sed和grep)普及开的。(摘自维基百科)

PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,这是个开放源代码的软件,作者为 Philip Hazel。

使用POSIX兼容规则的函数有:
ereg_replace()
ereg()
eregi()
eregi_replace()
split()
spliti()
sql_regcase()
mb_ereg_match()
mb_ereg_replace()
mb_ereg_search_getpos()
mb_ereg_search_getregs()
mb_ereg_search_init()
mb_ereg_search_pos()
mb_ereg_search_regs()
mb_ereg_search_setpos()
mb_ereg_search()
mb_ereg()
mb_eregi_replace()
mb_eregi()
mb_regex_encoding()
mb_regex_set_options()
mb_split()

使用PERL兼容规则的函数有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()

定界符:

POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(/)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符

修正符:

POSIX兼容正则没有修正符。

PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误):

i (PCRE_CASELESS):
匹配时忽略大小写。

m(PCRE_MULTILINE):
当设定了此修正符,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(/n)的之后和之前。

s(PCRE_DOTALL):
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

x(PCRE_EXTENDED):
如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略。

e
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。

A(PCRE_ANCHORED):
如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。

D(PCRE_DOLLAR_ENDONLY):
如果设定了此修正符,模式中的行结束($)仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了 m 修正符则忽略此选项。

S
当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY):
使“?”的默认匹配成为贪婪状态的。

X(PCRE_EXTRA):
模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。

u(PCRE_UTF8):
模式字符串被当成UTF-8。

逻辑区隔:

POSIX兼容正则和PERL兼容正则的逻辑区隔符号作用和使用方法完全一致:
[]:包含任选一操作的相关信息。
{}:包含匹配次数的相关信息。
():包含一个逻辑区间的相关信息,可被用来进行引用操作。
|:表示“或”,[ab]和a|b是等价的。

元字符与“[]”相关:

有两组不同的元字符:一种是模式中除了方括号内都能被识别的,还有一种是在方括号“[]”内被识别的。

POSIX兼容正则和PERL兼容正则“[]之外”“一致”的元字符:
/ 有数种用途的通用转义符
^ 匹配字符串的开头
$ 匹配字符串的结尾
? 匹配0或者1
* 匹配 0 个或多个前面指定类型的字符
+ 匹配 1 个或多个前面指定类型的字符

POSIX兼容正则和PERL兼容正则“[]之外”“不一致”的元字符:
. PERL兼容正则匹配除了换行符外的任意一个字符
. POSIX兼容正则匹配任意一个字符

POSIX兼容正则和PERL兼容正则“[]之内”“一致”的元字符:
/ 有数种用途的通用转义符
^ 取反字符,但仅当其为第一个字符时有效
- 指定字符ASCII范围,仔细研究ASCII码,你会发现[W-c]等价于[WXYZ//^_`abc]

POSIX兼容正则和PERL兼容正则“[]之内”“不一致”的元字符:
- POSIX兼容正则中[a-c-e]的指定会抛出错误。
- PERL兼容正则中[a-c-e]的指定等价于[a-e]。

匹配次数与“{}”相关:

POSIX兼容正则和PERL兼容正则在匹配次数方面完全一致:
{2}:表示匹配前面的字符2次
{2,}:表示匹配前面的字符2次或多次,默认都是贪婪(尽可能多)的匹配
{2,4}:表示匹配前面的字符2次或4次

逻辑区间与“()”相关:

使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现出一些字符出现的逻辑次序,另一个用处就是可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特:

<?php
$str = " http://www.163.com/ " ;
// POSIX兼容正则:
echo ereg_replace ( " (.+) " , " <a href = // 1 > // 1</a> " , $str ) ;
// PERL兼容正则:
echo preg_replace ( " /(.+)/ " , " <a href = $1 >$1</a> " , $str ) ;
// 显示两个链接
?>

在引用的时候,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。

类型匹配:

POSIX兼容正则:
[:upper:]:匹配所有的大写字母
[:lower:]:匹配所有的小写字母
[:alpha:]:匹配所有的字母
[:alnum:]:匹配所有的字母和数字
[:digit:]:匹配所有的数字
[:xdigit:]:匹配所有的十六进制字符,等价于[0-9A-Fa-f]
[:punct:]:匹配所有的标点符号,等价于[.,"'?!;:]
[:blank:]:匹配空格和TAB,等价于[ /t]
[:space:]:匹配所有的空白字符,等价于[ /t/n/r/f/v]
[:cntrl:]:匹配所有ASCII 0到31之间的控制符。
[:graph:]:匹配所有的可打印字符,等价于:[^ /t/n/r/f/v]
[:print:]:匹配所有的可打印字符和空格,等价于:[^/t/n/r/f/v]
[.c.]:功能不明
[=c=]:功能不明
[:<:]:匹配单词的开始
[:>:]:匹配单词的结尾

PERL兼容正则(这里可以看出PERL正则的强大):
/a alarm,即 BEL 字符(’0)
/cx "control-x",其中 x 是任意字符
/e escape(’0B)
/f 换页符 formfeed(’0C)
/n 换行符 newline(’0A)
/r 回车符 carriage return(’0D)
/t 制表符 tab(’0)
/xhh 十六进制代码为 hh 的字符
/ddd 八进制代码为 ddd 的字符,或 backreference
/d 任一十进制数字
/D 任一非十进制数的字符
/s 任一空白字符
/S 任一非空白字符
/w 任一“字”的字符
/W 任一“非字”的字符
/b 字分界线
/B 非字分界线
/A 目标的开头(独立于多行模式)
/Z 目标的结尾或位于结尾的换行符前(独立于多行模式)
/z 目标的结尾(独立于多行模式)
/G 目标中的第一个匹配位置

到这里,基本的功能已经介绍完了,余下的主要是PERL兼容正则的高级功能,以后补充。

PHP中的字符串函数(String Functions)

星期日, 3月 4th, 2007

手中的PHP手册不知道具体是哪个版本的,只知道是PHP5.1的,有94个字符串处理函数,真的是有够多,下面开始按照从简单到复杂的顺序介绍这些函数的使用功能和使用方法:

先给出一个总表:
addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode — htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“/n”替换成“<br />”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn — 返回字符连续非匹配长度的值
strip_tags — 去除一个字符串里面的HTML和PHP代码
stripcslashes — 反转义addcslashes()函数转义处理过的字符串
stripos — 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes — 反转义addslashes()函数转义处理过的字符串
stristr — 通过比较返回一个字符串的部分,比较时不区分大小写
strlen — 获取一个字符串的编码长度
strnatcasecmp — 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp — 使用自然排序法对字符串进行大小比较
strncasecmp — 对字符串的前N个字符进行大小比较,不区分大小写
strncmp — 对字符串的前N个字符进行大小比较
strpbrk — 通过比较返回一个字符串的部分
strpos — 查找并返回首个匹配项的位置
strrchr — 通过从后往前比较返回一个字符串的部分
strrev — 将字符串里面的所有字母反向排列
strripos — 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos – 从后往前查找并返回首个匹配项的位置
strspn — 匹配并返回字符连续出现长度的值
strstr — 通过比较返回一个字符串的部分
strtok — 用指定的若干个字符来分割字符串
strtolower — 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr — 对字符串比较替换
substr_compare — 对字符串进行截取后的比较
substr_count — 计算字符串中某字符段的出现次数
substr_replace — 对字符串中的部分字符进行替换
substr — 对字符串进行截取
trim — 去除字符串两边的空白或者指定的字符
ucfirst — 将所给字符串的第一个字母转换为大写
ucwords — 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf — 按照要求对数据进行返回,并直接写入文档流
vprintf — 按照要求对数据进行显示
vsprintf — 按照要求对数据进行返回,但是不输出
wordwrap — 按照一定的字符长度分割字符串

strtolower()函数把所有字符变成小写,strtoupper()函数把所有字符变成大写,ucfirst()函数将所给字符串的第一个字母转换为大写,ucwords()函数将所给字符串的每一个英文单词的第一个字母变成大写。
ucfirst()只处理字符串的首个字符,ucwords()只处理每个单词的首字母(以空格来界定是否是单词,“today!Hi”、“today.Hi” 会被认为是一个单词),对于其余字母的大小写状态并不改变。

<?php
echo strtolower ( " ABCD " ) ; //显示 abcd
echo strtoupper ( " abcd " ) ; //显示 ABCD
echo ucfirst ( " what a beautiful day today! " ) ; //显示 What a beautiful day today!
echo ucwords ( " what a beautiful day today! " ) ; //显示 What A Beautiful Day Today!
?>

trim()函数去除字符串两边的空白或者指定的字符,ltrim()函数去除字符串左侧的空白或者指定的字符,rtrim()函数去除字符串右侧的空白或者指定的字符,chop()函数和rtrim()函数功能相同,这四个函数都不支持UFT-8中文字符。

<?php
echo trim ( " what a beautiful day today! " , " ! adlotwy " ) ; //显示 hat a beautifu
echo ltrim ( " what a beautiful day today! " , " ! adlotwy " ) ; //显示 hat a beautiful day today!
echo rtrim ( " what a beautiful day today! " , " ! adlotwy " ) ; //显示 what a beautifu
echo chop ( " what a beautiful day today! " , " ! adlotwy " ) ; //显示 what a beautifu
?>

echo()函数用以显示一些内容,可以使用<< 《What is the difference between echo and print》 查看两者的差别。echo() 和 print()后面的小括号,可加可不加。

<?php
$temp = " " ;
echo $temp ; //显示“都”
echo <<<END


$temp



END;//显示“大家都好吗?”
echo "大家",
$temp ,"好!";//显示“大家都好”
 
$temp = "都";
print
$temp ; //显示“都”
print <<<END


$temp



END;//显示“大家都好吗?”
?>

printf()函数可以按照要求对数据进行显示,该函数的功能异常强大,即可以让值在不同的字符格式和进制之间转换,还可以实现字符补白 (pad)和截取等功能。sprintf()函数,fprintf()函数的功能和printf()函数完全一样,只不过sprintf()函数是返回结 果而不是直接输出,fprintf()必须用在将输出写入文档流的时候。下面仅以printf()函数举例:
在printf()函数的第一个参数中:
% - 转义字符(在%开始,字母结束的格式定义内部,使用“'”进行转义)
b – 二进制格式输出
c - 将ASCII值转变为对应的值输出
d – 有符号的十进制数输出(整数)
e – 科学计数法输出
u – 无符号的十进制数输出(正数)
f – 浮点格式输出(locale aware)
F – 浮点格式输出(non-locale aware)
o – 八进制格式输出
s – 字符串格时输出
x – 十六进制格式输出(字母小写)
X - 十六进制格式输出(字母大写)

<?php
$n 43951789 ;
$u = - 43951789 ;
$c = 65 ; // 'A'的ASCII值为65
printf ( " %b " , $n ) ; //显示10100111101010011010101101
printf ( " %c " , $c ) ; //显示A
printf ( " %d " , $n ) ; //显示43951789
printf ( " %e " , $n ) ; //显示4.39518e+7
printf ( " %u " , $n ) ; //显示43951789
printf ( " %u " , $u ) ; //显示4251015507
printf ( " %f " , $n ) ; //显示43951789.000000
printf ( " %F " , $n ) ; //显示43951789.000000
printf ( " %o " , $n ) ; //显示247523255
printf ( " %s " , $n ) ; //显示43951789
printf ( " %x " , $n ) ; //显示29ea6ad
printf ( " %X " , $n ) ; //显示29EA6AD
printf ( " %+d " , $n ) ; //显示+43951789
printf ( " %+d " , $u ) ; //显示-43951789
?>

printf的第一个参数还内置了类似正则的功能:
1、第一位是可选的一个“+”,这个符号只对数字格式的输出有效,因为如果是负数的话,前面会有一个“-”,有时候会需要在正数前面加一个“+”,但是PHP默认是隐去“+”号显示的,所以需要在前面加一个“+”输出“+”号
2、第二位是可选的填充字符,用这个字符来起到填充空白的左右,功能类似str_pad()函数,保留字符可以用“'”转义
3、第三位表示填充的方向,是可选的,“+”是默认值,表示在左侧填充,“-”表示在右侧填充
4、第四位表示填充完成后的长度,也是可选的,没有这个参数就表示不进行填充
5、第五位可选参数,如果输出是浮点数,可以控制小数点后面的个数,如果是输出字符串,则可以用来截取字符串的长度,使用时为了和前面的参数区分,需要用“.”隔开

<?php
$t = ' many monkeys ' ;
$n = 1213 ;
printf ( " %+d " , $n ) ; // 1、显示 +1213
printf ( " %010d " , $n ) ; // 2、显示000001213
printf ( " %+'#10d " , $n ) ; // 2、显示 #####+1213
printf ( " %+'#-10d " , $n ) ; // 3、显示 +1213#####
printf ( " %.2f " , $n ) ; // 5、显示 1213.00
printf ( " %.7s " , $t ) ; // 5、显示 many mo
?>

了解了上面这些之后,让我们看printf()函数的使用方法,其实就是将接受的从第二个参数以后的所有参数一个一个的在第一个参数中需要转换的地方输出,如果参数次序被打乱,就需要使用“2/$”这样的字符来表明变量的位置。

<?php
$num = " tree " ;
$location = 10 ;
$format1 = " The %s contains %d monkeys " ;
printf ( $format1 , $num , $location ) ;
//显示 The tree contains 10 monkeys
$format2 = " The %s contains %d monkeys " ;
printf ( $format2 , $location , $num ) ;
//显示 The tree contains 10 monkeys
?>

vprintf()函数、vsprintf()函数、vfprintf()函数三个函数的功能和上面的printf()函数、sprintf()函 数、fprintf()的功能一样,vprintf()函数直接输出,vsprintf()函数返回但是不输出,vfprintf()函数直接将结果输出 到文档流,区别就是这三个函数接受的参数都是数组形式的,而不是一个一个的变量。
这里只举vprintf()函数的例子:

<?php
$num = " tree " ;
$location = 10 ;
$argu1 = array ( " tree " , 10 ) ;
$argu2 = array ( 10 , " tree " ) ;
$format1 = " The %s contains %d monkeys " ;
printf ( $format1 , $num , $location ) ;
// 显示 The tree contains 10 monkeys
$format1 = " The %s contains %d monkeys " ;
vprintf ( $format1 , $argu1 ) ;
// 显示 The tree contains 10 monkeys
$format2 = " The %2 /$ s contains %1 /$ d monkeys " ;
vprintf ( $format2 , $argu2 ) ;
// 显示 The tree contains 10 monkeys
?>

number_format()函数可以按照参数对数字进行格式化的输出,number_format()函数最多有4个参数,第一个参数是输出的 数字,第二个参数表示保留几位小数,第三个参数和第四个参数必须同时使用(就是说不能只用第三个参数,而不使用第四个参数),分别表示小数点的样式和千分 符的样式,默认分别为“.”和“,”。

<?php
$num = 1234.56 ;
$new_num = number_format ( $num , 3 , " . " , " - " ) ;
echo $new_num ; // 显示 1-234.560
?>

money_format()函数需要C里面的strfmon()函数支持,所以需要系统能够提供C函数库,很显然,windows系统无法支持此功能,所以在windows下面的PHP环境不支持money_format()函数,此函数的介绍以后再补充:(

sscanf()函数可以对字符串进行格式化,第一个参数表示需要处理的字符,第二个参数表示变量匹配的规则(匹配规则请参照上面的printf ()函数),后面的参数可选,分别对应需要赋值的变量,如果仅仅只有2个参数,那么所有的变量值将以一个数组的形式返回。在下面的例子中,“%s”的匹配 是贪婪的,所以在使用时要注意。

<?php
$mandate = " January 01 2000 " ;
list ( $month , $day , $year ) = sscanf ( $mandate , " %s %d %d " ) ;
echo " $year - " . $month . " - $day " ; // 显示 2000-January-1
?>

str_replace()函数可以匹配和替换字符串,第一个参数表示需要匹配的项,第二个参数表示替换的项,第三个参数表示处理的字符串。第四个 参数可选,将一个变量赋值为匹配的次数,前两个参数也可以是数组形式的。str_ireplace()函数的功能和str_replace()函数类似, 只不过在匹配的时候str_ireplace()函数会忽略大小写。

<?php
$str1 = str_replace ( " world " , " body " , " hello world world " ) ;
echo $str1 ; // 显示 hello body body
$str1 = str_ireplace ( " WORLD " , " body " , " hello world world " ) ;
echo $str1 ; // 显示 hello body body
 
$phrase   = " You should eat fruits, vegetables, and fiber every day. " ;
$healthy = array ( " fruits " , " vegetables " , " fiber " ) ;
$yummy    = array ( " pizza " , " beer " , " ice cream " ) ;
$newphrase = str_replace ( $healthy , $yummy , $phrase , $count ) ;
echo $newphrase ; // 显示 You should eat pizza, beer, and ice cream every day.
echo $count ; // 显示 3
?>

strtr()函数的作用是对字符串替换,strtr()函数有两种使用方法,第一种使用三个参数,替换时会将第二个参数的字符串替换为第三个参数 的字符串(如果两个字符串参数的长度不一致,则教长的那个字符串将会被截断),第二种方法使用两个参数,第二个参数是一个准备进行替换处理的数组。

<?php
$trans = strtr ( " hello world " , " world " , " body " ) ;
echo $trans ; //显示 heyyo bodyd (w=>b,o=>o,r=>d,l=>y)
$arr = array ( " hello " => " hi " , " hi " => " hello " ) ;
$trans = strtr ( " hi all, I said hello " , $arr ) ;
echo $trans ; //显示 hello all, I said hi
?>

strstr()函数通过比较返回一个字符串的部分。函数有两个参数,第一个参数表示处理的字符串,第二个参数表示匹配项,返回结果为从匹配位置开 始到最后的一个字符串,如果没有匹配,则返回false。strchr()函数是strstr()函数的别名,功能和使用方法完全一样。strrchr ()函数的功能和strstr()函数类似,区别是strrchr()函数是从后向前匹配的,stristr()函数的功能和strstr()函数一样, 但是匹配是不区分字母的大小写。strpbrk()的功能和strstr()函数类似,是在一个字母串里面找出第一个匹配项,返回以后的结果。

<?php
$email = ' user@example.com ' ;
$domain = strstr ( $email , ' @ ' ) ;
echo $domain ; // 显示 @example.com
$exam = strrchr ( $email , ' e ' ) ;
echo $exam ; // 显示 e.com
$exam = stristr ( $email , ' EX ' ) ;
echo $exam ; // 显示 example.com
$exam = strpbrk ( $email , ' pe ' ) ;
echo $exam ; // 显示 er@example.com
?>

strpos()函数查找并返回首个匹配项的位置,第一个参数表示处理的字符串,第二个参数表示匹配项,第三个参数可选,表示开始执行查找的位置。 stripos()函数的功能和strpos()函数类似,区别是匹配的时候不会区分大小写。strrpos()函数和strpos()函数功能类似,区 别是从后往前匹配,strripos()函数的功能和strrpos()函数类似,区别是不区分大小写。strrpos()函数在PHP4中只支持单个字 母的查找,如果参数是字符串,则截取第一个字母,PHP4不支持strripos()函数。

<?php
$newstring = ' abcdef abcdefab ' ;
$pos = strpos ( $newstring , ' a ' , 1 ) ;
echo $pos ; // 显示 7
$pos = strrpos ( $newstring , ' ab ' , 6 ) ;
echo $pos ; // 显示 13
?>

count_chars()函数的作用是返回一个字符串里面的字符使用信息。第二个参数五个参数:
0 - 以所有的每个字节值作为键名,出现次数作为值的数组。
1 - 与 0 相同,但只列出出现次数大于零的字节值。
2 - 与 0 相同,但只列出出现次数等于零的字节值。
3 - 返回由所有使用了的字节值组成的字符串。
4 - 返回由所有未使用的字节值组成的字符串。

<?php
$data = " this is a test world " ;
print_r ( count_chars ( $data , 1 )) ; // 显示用到字符信息
print_r ( count_chars ( $data , 3 )) ; // 显示 adehilorstw
?>

strspn()函数的作用是匹配并返回第二个参数里面的单字符连续出现长度的值,strspn()函数的第三个参数和第四个参数可选,分别表示开 始匹配的位置和返回的最大值。strcspn()函数的使用方法和strspn()函数类似,但功能却相反,返回的是第二个参数中不匹配的字符串长度。

<?php
$var = strspn ( " 42123 is the answer " , " 1234567890 " ) ;
echo $var ; //显示 5
echo strspn ( " faoaaol " , " oa " , 1 , 3 ) ; // 显示 3
echo strcspn ( " csdcsdfaoaaol " , " oa " , 1 , 9 ) ; // 显示 6
?>

substr()函数可以对字符串进行截取,substr()函数可以有三个参数,第二个参数如果是空,那么默认就为0,如果我负数,就表示从后往 前计数,第三个参数如果是正数,表示字符串截取的长度,如果省略,则会一直截取到最后,如果是负数,则表示从后往前截取到的位置。

<?php
echo substr ( ' abcdef ' , 3 , 2 ) // 显示 de
echo substr ( ' abcdef ' , "" , 2 ) // 显示 ab
echo substr ( " abcdef " , - 2 ) ;    // 显示 ef
echo substr ( " abcdef " , - 3 , 1 ) ; // 显示 d
echo substr ( " abcdef " , - 3 , - 1 ) ; // 显示 de
?>

substr_count()函数的作用是计算字符串中某字符段的出现次数,第三个参数表示在字符串中开始比较的位置,省略则默认从头开始,第四个参数表示依次比较的字符数,省略则表示一直比较到末尾。和substr()函数有所不同的是,这两个参数都不支持负数。

<?php
$text = ' This is a test ' ;
echo substr_count ( $text , ' is ' ) ; // 显示 2
echo substr_count ( $text , ' is ' , 3 ) ; // 显示 1
echo substr_count ( $text , ' is ' , 3 , 3 ) ; // 显示 0
?>

substr_replace()函数的作用是对字符串中的部分字符进行替换,substr_replace()函数的第三个参数必选,表示需要处 理字符的起始位置,负数表示从后往前计数,第四个参数可选,省略表示一直替换到最后,正数表示替换的长度,负数表示从后往前替换到的位置。

<?php
$var = ' ABCDEFGH:/MNRPQR/ ' ;
echo substr_replace ( $var , ' bob ' , 0 ) ; // 显示 bob
echo substr_replace ( $var , ' bob ' , 0 , 0 ) ; // 显示 bobABCDEFGH:/MNRPQR/
echo substr_replace ( $var , ' bob ' , 10 , - 1 ) ; // 显示 ABCDEFGH:/bob/
echo substr_replace ( $var , ' bob ' , - 7 , - 1 ) ; // 显示 ABCDEFGH:/bob/
echo substr_replace ( $var , '' , 10 , - 1 ) ; // 显示 ABCDEFGH://
?>

implode()函数的作用是将数组转变为字符串,explode()函数的作用是将一个字符串转变为一数组形式。implode()函数前两个 参数的位置是任意的,而explode()函数则不行。explode()函数第三个参数可选,省略则表示全部返回,正数表示返回的数组中单元的个数,最 后一个单元包含了未处理完的字符串,负数表示返回值中将除去最后的若干个单元。join()函数的作用和implode()函数相同,是implode ()函数的别名。

<?php
$array = array ( ' lastname ' , ' email ' , ' phone ' ) ;
echo implode ( $array , " , " ) ; // 显示 lastname,email,phone
$str = ' one|two|three ' ;
print_r ( explode ( ' | ' , $str )) ; // 显示 Array ( [0] => one [1] => two [2] => three )
print_r ( explode ( ' | ' , $str , 2 )) ; // 显示 Array ( [0] => one [1] => two|three )
print_r ( explode ( ' | ' , $str , - 1 )) ; // 显示 Array ( [0] => one [1] => two )
?>

strtok()函数的作用是用指定的若干个字符来分割字符串,此函数的功能较强大,但是使用方法比较特殊。在连续使用的时候,第一次需要说明字符串和分割符,但是第二次的时候,只要放入分割符就可以,分割符可以是多个内容,但是不能使用字符串,具体请研究下面的例子:

<?php
$string = " This is /t an example /n string " ;
$tok = strtok ( $string , " /n/t " ) ;
 
while ( $tok !== false ) {
    
echo " $tok <br /> " ;
    
$tok = strtok ( " /n/t " ) ;
}
?>

str_split()函数的作用是将一个字符串按照字符间距分割为一个数组,str_split()函数有两个参数,第二个参数可选,默认值为“1”。

<?php
$str1 = " asd " ;
$str2 = " Hello Friend " ;
print_r ( str_split ( $str1 )) ; // 显示 Array ( [0] => a [1] => s [2] => d )
print_r ( $arr2 = str_split ( $str2 , 4 )) ; // 显示 Array ( [0] => Hell [1] => o Fr [2] => iend )
?>

chunk_split()函数的作用是按一定的字符长度将字符串分割成小块,第二个参数可选,表示字符间距,默认为76,第三个参数可选,表示用什么字符进行分割,默认为“/r/n”。

<?php
$str = " asdasdasd " ;
echo chunk_split ( $str , 3 , " , " ) ; // 显示 asd,asd,asd,
?>

wordwrap()函数的作用是按照一定的字符长度分割字符串,第二个参数可选,表示按多少字符进行分割,默认为75,第三个参数可选,表示用哪个字符分割,默认为“/n”,第四个参数可选,true表示强制打破一个单词,false表示不大破单词,默认为false。

<?php
$text = " A very long woooooooooood asdasd " ;
echo wordwrap ( $text , 12 , " <br /> /n " , true ) ; // woooooooooood被打破
echo wordwrap ( $text , 12 , " <br /> /n " , false ) ; // woooooooooood未被打破
?>

strlen()函数的作用是获取一个字符串的编码长度。

<?php
$text1 = " ABC " ;
$text2 = " 中文 " ;
echo strlen ( $text1 ) ; // 显示 3
echo strlen ( $text2 ) ; // 显示 6
?>

str_word_count()函数的作用是获取字符串里面的英文单词信息,第二个参数可选,0表示只返回单词的个数,1表示将找到的单词作为一 个数组返回,2表示找到的单词和单词所在的字符位置信息作为一个联合数组(associative)返回,省略的默认值是0;第三个参数也是可选的,表示 需要忽略的断词符号,默认的断词符号有空格,数字等等,有时候需要忽略一些。

<?php
$str = " Hello fri3nd, you're
       looking          good today!
" ;
echo str_word_count ( $str ) ; // 显示 7
print_r ( str_word_count ( $str , 1 )) ;
 
// 显示 Array ( [0] => Hello [1] => fri [2] => nd [3] => good [4] => today )
print_r ( str_word_count ( $str , 2 )) ;
// 显示 Array ( [0] => Hello [6] => fri [10] => nd [14] => good [19] => today )
print_r ( str_word_count ( $str , 1 , ' àá~ac3 ' )) ;
// 显示 Array ( [0] => Hello [1] => fri3nd [2] => good [3] => today )
?>

nl_langinfo()函数的作用是获取某些字符信息,但是没有在windows平台下实现,所以,我以后在讨论。

localeconv()函数的作用是获取数字相关的格式定义。setlocale()函数可以设置关于数字,日期等等的本地格式,相关内容较复 杂,这里省略不谈。这两个函数的作用是为了解决在不同的国家地区之间,对数字,货币,日期等字符形式不同的表现内容而进行简易设置的作用。

strrev()函数的作用是将字符串里面的所有字母反向排列。str_shuffle()函数的作用是对一个字符串里面的字符进行随机排序。

<?php
echo strrev ( " ABC " ) ; // 显示 CBA
$str = ' abcdef ' ;
echo str_shuffle ( $str ) ;
?>

str_pad()函数的作用是对字符串进行两侧的补白,第二个参数表示补白以后的长度,第三个参数可选,表示进行补白的字符串,默认为空格,第四 个参数可选,表示补白的方式,有三个常量可以选择:STR_PAD_RIGHT,STR_PAD_LEFT和STR_PAD_BOTH,分别表示右补白, 左补白和两侧补白,默认值为STR_PAD_RIGHT。

<?php
$input = " Alien " ;
echo str_pad ( $input , 10 ) ;                      // 显示 "Alien     "
echo str_pad ( $input , 10 , " -= " , STR_PAD_LEFT ) // 显示 "-=-=-Alien"
echo str_pad ( $input , 10 , " _ " , STR_PAD_BOTH ) ;    // 显示 "__Alien___"
echo str_pad ( $input , 6 , " ___ " ) ;                // 显示 "Alien_"
?>

str_repeat()函数的作用是对字符串进行重复组合,第二个参数表示重复的次数,值为0的时候将返回一个空字符串。

<?php
echo str_repeat ( " ab " , 3 ) ; // 显示 ababab
?>

chr()函数的作用是返回一个字符的ASCII码,ord()函数的作用是将一个ASCII码转换为一个字符。

<?php
$str = " a " ;
echo ord ( $str ) ; // 显示 97
$asc2 = 97 ;
echo chr ( $asc2 ) ; //显示 a
?>

strcmp()函数的作用是对字符串进行大小比较,第一个参数大于第二个参数时返回一个大于0的数,小于则返回一个小于0的数,等于则返回0,此 函数的比较结果返回值是非常令人困惑的,因而此函数的主要用处是比较两个字符串是否相等。strncmp()函数的作用和strcmp()函数类似,区别 是strncmp()函数有第三个必选参数,用来限制进行比较的前N个字符。strcasecmp()的作用和strcmp()函数类似,区别是 strcasecmp()函数忽略大小写。strncasecmp()函数的作用和strncmp()函数类似,区别是strncasecmp()函数忽 略大小写。strnatcmp()函数的作用和strcmp()函数类似,区别是strnatcmp()函数使用自然排序法对字符串之间进行比较。 strnatcasecmp()函数的作用和strnatcmp()函数类似,区别是strnatcasecmp()函数比较时不区分大小写。 strcoll()函数的作用和strcmp()函数类似,区别是strcoll()函数会根据本地环境的设置而改变比较的方式,而产生不同的结果,这里 暂时跳过不讨论。

<?php
echo strcmp ( " red " , " red " ) ; // 显示 0
echo strncmp ( " red apple " , " red " , 3 ) ; // 显示 0
echo strcasecmp ( " Red " , " red " ) ; // 显示 0
echo strncasecmp ( " Red apple " , " red " , 3 ) ; // 显示 0
?>

上面这些函数的另一个作用是被作为回调函数的形式使用(其实也是最主要的用途所在):

<?php
$arr1 = $arr2 = array ( " img12.png " , " img10.png " , " img2.png " , " img1.png " ) ;
usort ( $arr1 , " strcmp " ) ;
print_r ( $arr1 ) ; // 显示标准排序以后的结果
usort ( $arr2 , " strnatcmp " ) ;
print_r ( $arr2 ) ; // 显示自然排序以后的结果
?>

substr_compare()函数可以对字符串进行截取后的比较,第三个参数表示比较开始的起始位置,第四个参数可选,表示进行比较的长度,省略则表示一直比较到末尾,第五个参数可选,设置为true可以忽略大小写,false表示不忽略大小写,默认值为false。

<?php
echo substr_compare ( " abcde " , " bc " , 1 , 2 ) ; // 显示 0
echo substr_compare ( " abcde " , " bcg " , 1 , 2 ) ; //显示 0
echo substr_compare ( " abcde " , " BC " , 1 , 2 , true ) ; //显示 0
echo substr_compare ( " abcde " , " bc " , 1 , 3 ) ; //显示 1
echo substr_compare ( " abcde " , " cd " , 1 , 2 ) ; //显示 -1
echo substr_compare ( " abcde " , " abc " , 5 , 1 ) ; //显示 报错
?>

similar_text()函数的作用是比较两个字符串,返回系统认为的相似字符个数,第三个参数可选,可以对一个变量附值为相似度百分比。levenshtein()函数的作用是对字符串进行比较,并且返回两个字符串的相似度,有三个可选参数,但是不知道如何使用。

<?
echo similar_text ( " abcdas " , " abdcas " , $p ) ; // 显示 5
echo " $p % " ; // 显示 83.3333333333%
echo levenshtein ( " ab " , " abcd " ) ; // 显示 2
echo levenshtein ( " abc " , " abcd " ) ; // 显示 1
echo levenshtein ( " abcd " , " abcd " ) ; // 显示 0
?>

soundex()函数的作用是判断一个字符串的发音规则,用4位的字符串表示。metaphone()函数的作用是判断一个字符串的发音规则,和soundex()函数类似,但是显示的是一个不定长的字符串。

<?php
echo soundex ( " Ellery " ) ;    // 显示 E460
echo soundex ( " Ghosh " ) ;      // 显示 G200
echo soundex ( " Heilbronn " ) ; // 显示 H416
echo metaphone ( " Ellery " ) ;    // 显示 ELR
echo metaphone ( " Ghosh " ) ;      // 显示 FX
echo metaphone ( " Heilbronn " ) ; // 显示 HLBRN
?>

addslashes()函数的作用是为字符串里面的部分字符添加反斜线转义字符,addslashes()函数只为4个字符添加转义,单引号“’ ”,双引号“"”,反斜线“/”和NULL(“/0”)。addcslashes()函数的作用也是对字符串添加转义,但是转义的字符必须由第二个参数指 定,第二个参数的使用方法难度太高,跳过不讲。stripslashes()函数的作用和addslashes()函数正好相反,可以将 addslashes()函数转义的那4个字符取消转义。同样,stripcslashes()函数的作用和addcslashes()函数相反。 quotemeta()函数的作用是对11个特定字符进行转义,包括:. / + * ? [ ^ ] ( $ ) 似乎是可以用在正则里面。

<?php
echo addslashes ( " ' /" / " ) ; // 显示 /'/"//
echo addcslashes ( " zoo['.'] " , ' zo ' ) ; // 显示 /z/o/o['.']
echo addcslashes ( " z /" oo['.'] " , ' /'/" ' ) ; // 显示 z/"oo[/'./']
echo addcslashes ( ' foo[ ] ' , ' A..z ' ) ; // 显示 /f/o/o/[ /]
echo stripslashes ( addslashes ( " ' /" / " )) ; // 显示 '"/
echo stripcslashes ( addcslashes ( " z /" oo['.'] " , ' /'/" ' )) ; // 显示 z"oo['.']
echo quotemeta ( " . / + * ? " ) ; // 显示 /. // /+ /* /?
?>

htmlspecialchars()函数的作用是将字符串中一些字符转换为HTML实体,默认情况下主要包括这4个字符:“<”, “>”,“&”和“””,分别转换为HTML实体:“<”,“>”,“&”呵“"”。htmlentities()函 数的第二个可选参数可以选择引号的转换模式,可以选择三个常量:ENT_COMPAT表示转换双引号但是保留单引号,ENT_QUOTES表示同时转换双 引号和单引号,ENT_NOQUOTES表示两个都不转换,默认值为ENT_COMPAT。第三个可选参数表示所转换字符的编码集。 htmlspecialchars_decode()函数的作用和htmlspecialchars()函数刚好相反,但是两个函数的使用方法一样。

<?php
$str = " <a href='test'>Test</a> " ;
echo htmlspecialchars ( $str ) ; // 显示(源代码里面) &lt;a href='test'&gt;Test&lt;/a&gt;
echo htmlspecialchars ( $str , ENT_QUOTES ) ; // 显示(源代码里面) &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
$str = ' &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; ' ;
echo htmlspecialchars_decode ( $str ) ; // 显示(源代码里面) <a href='test'>Test</a>
?>

htmlentities()函数的用法和htmlspecialchars()函数类似,但是htmlspecialchars()函数会转义更 多的HTML里面的字符(请查看手册的htmlspecialchars()函数的表格1《已支持字符集》部分),所以使用时要注意加上第三个参数。 html_entity_decode()函数的作用和htmlentities()函数正好相反,但是用法完全一样,使用时也要注意用到第三个参数。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
$str = " <a href='test'>中文</a> " ;
echo htmlentities ( $str , ENT_COMPAT , " UTF-8 " ) ; //显示(源代码里面) &lt;a href='test'&gt;涓枃&lt;/a&gt;
echo html_entity_decode ( htmlentities ( $str , ENT_COMPAT , " UTF-8 " ) , ENT_COMPAT , " UTF-8 " ) ; // 显示(源代码里面) <a href='test'>中文</a>
?>

get_html_translation_table()函数的作用是返回可以转换的HTML实体,算是一个比较有意思,也是有趣的工具函数。 get_html_translation_table()函数有两个常量参数,第一个参数表示所选择显示哪种转换模式下的内容, HTML_ENTITIES表示大范围的htmlentities()函数所用到的转换内容,HTML_SPECIALCHARS表示小范围的 htmlspecialchars()函数所用到的转换内容,第二个参数的三种模式ENT_COMPAT,ENT_QUOTES, ENT_NOQUOTES的作用,可以查看htmlspecialchars()函数里面的介绍。

<?php
print_r ( get_html_translation_table ( HTML_SPECIALCHARS , ENT_QUOTES )) ;
?>
/* 显示
Array
(
    ["] => &quot;
    ['] => &#39;
    [<] => &lt;
    [>] => &gt;
    [&] => &amp;
)
*/

nl2br()函数的作用是将字符串中的换行符“/n”替换成“<br />”。

<?php
echo nl2br ( " foo isn't /n bar " ) ; // 显示(源代码里面) foo isn't<br /> bar
?>

strip_tags()函数的作用是去除一个字符串里面的HTML和PHP代码(其实好像就是去掉“<”开始“>”结尾的字符串,无所谓PHP)。第二个参数表示允许出现的标签对。

<?php
$text = ' <p>Test paragraph.</p><em>Other text</em> ' ;
echo strip_tags ( $text , ' <p> ' ) ; // 显示 <p>Test paragraph.</p>Other text
?>

parse_str()函数的作用是把一定格式的字符串转变为变量和值,字符串的格式和URL的格式相同。

<?php
parse_str ( ' d=12&c[]=as ' ) ;
echo $c [ 0 ] ; // 显示 as
echo $d ; // 显示 12
?>

hebrev()函数的作用是将Hebrew编码的字符串转换为可视的文本,hebrevc函数的作用是和hebrev()函数类似,区别是会将字 符串里面的“/n”转变为“<br>/n”。hebrev()函数和hebrevc函数的第二个参数用法相同,可以设定每行的显示字符数,行 末不会强制打断一个单词。

convert_cyr_string()函数的作用是将斯拉夫语字符转换为别的字符。

bin2hex()函数的作用是将二进制数据转换成十六进制的数据。

str_rot13函数的作用是将字符串进行ROT13加密处理,方法是将所有字符移动13个字母位置,因为英文一共是26个字母,所以该函数的加密解密可以使用同一个函数。

<?php
echo str_rot13 ( ' str_rot13 ' ) ; // 显示 fge_ebg13
echo str_rot13 ( str_rot13 ( ' str_rot13 ' )) ; // 显示 str_rot13
?>

md5()函数的作用是将一个字符串进行MD5算法加密,返回一个32位的16位字符串,第二个参数如果设置为true,将会返回一个16位的2进制字符串。md5_file()函数的作用是对文件进行MD5加密,使用方式和md5()函数相同。

<?php
echo md5 ( ' apple ' ) ; //显示 1f3870be274f6c49b3e31a0c6728957f
echo bin2hex ( md5 ( ' apple ' , true )) ; //显示 1f3870be274f6c49b3e31a0c6728957f
?>

sha1()函数的作用是将一个字符串进行SHA1算法加密,返回一个40位的16位字符串,第二个参数如果设置为true,将会返回一个20位的2进制字符串。sha1_file()函数的作用是对文件进行SHA1加密,使用方式和sha1()函数相同。

<?php
$str = ' apple ' ;
echo sha1 ( ' apple ' ) ; //显示 d0be2dc421be4fcd0172e5afceea3970e2f3d940
echo bin2hex ( sha1 ( ' apple ' , true )) ; //显示 d0be2dc421be4fcd0172e5afceea3970e2f3d940
?>

crypt()函数的作用是对一个字符串进行散列处理,返回一个加密后的字符串。第二个可选参数是一个加密参考量,crypt()函数会根据这个量 来产生加密的值,第二个参数如果省略,PHP将会随机产生一个参考量;第二个参数的处理,需要根据4个PHP的预定义常量,PHP会更具预定义常量的设 定,对参考量进行处理,再进行加密。
CRYPT_STD_DES – 标准模式,获取参考量的前两位。
CRYPT_EXT_DES – 扩展模式,获取参考量的前九位。
CRYPT_MD5 – MD5模式,参考量为$1$开始的一个常量CRYPT_SALT_LENGTH指定长度的字符串。
CRYPT_BLOWFISH – 河豚模式,参考量为$2$或者$2a$开始的一个16位长的字符串。

<?php
if ( CRYPT_STD_DES == 1 ) {
    
echo ' Standard DES: ' . crypt ( ' rasmuslerdorf ' , ' rl ' ) ;
} // 显示 rl.3StKT.4T8M
if ( CRYPT_EXT_DES == 1 ) {
    
echo ' Extended DES: ' . crypt ( ' rasmuslerdorf ' , ' _J9..rasm ' ) ;
} // 显示 _J9..rasmBYk8r9AiWNc
if ( CRYPT_MD5 == 1 ) {
    
echo ' MD5:          ' . crypt ( ' rasmuslerdorf ' , ' $1$rasmusle$ ' ) ;
} // 显示 $1$rasmusle$rISCgZzpwk3UhDidwXvin0
if ( CRYPT_BLOWFISH == 1 ) {
    
echo ' Blowfish:      ' . crypt ( ' rasmuslerdorf ' , ' $2a$07$rasmusler...........$ ' ) ;
} // 显示 $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
?>

crc32()函数的作用是计算一个字符串的crc32多项式

<?php
$checksum = crc32 ( " Hello World! " ) ;
printf ( " %u /n " , $checksum ) ; // 显示 472456355
?>

quoted_printable_decode()函数不知道什么意思。

convert_uuencode()函数的作用是对一个字符串进行加密,convert_uudecode()函数的作用和convert_uuencode()函数相反,可以起到解密的作用。

<?php
$some_string = " test /n text text /r/n " ;
echo convert_uuencode ( $some_string ) ; // 显示 0=&5S=`IT97AT('1E>'0-"@`` `
echo convert_uudecode ( convert_uuencode ( $some_string )) ; //显示 test text text
?>

PHPer使用UTF-8注意事项

星期四, 3月 1st, 2007

本文的作用是为了全方位的避免因使用UTF-8编码而产生的乱码问题,不包含具体的乱码解决方案和编码转换的内容。对于UTF-8编码的深入了解,请参阅:《PHP匹配UTF-8中文字符的正则表达式》

1、编辑器:不要使用任何微软的编辑器,什么Frontpage,Web Designer,记事本,写字板什么的,能丢的全部丢开,因为这些编辑器会在你的UTF-8文档前面产生BOM,关于BOM的具体说明,可以在 这里 找到,当年我直接拿记事本转UTF-8覆盖原文件,造成大量代码损毁,至今记忆犹新。

2、MySQL数据库:注意建库,建表,建字段(注意有三处)的时候,都要选用utf8_general_ci的整理格式(Collation),在PHP使用mysql_connect()函数连接数据之后,需要加上一句:

mysql_query('set names "utf8"');

3、PHP:
使用mb库,不要使用iconv库。
使用preg而不要使用ereg来处理字符。
使用htmlentities()函数,html_entity_decode()函数的时候要带上第三个参数:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
$str = " <a href='test'>中文</a> " ;
echo htmlentities ( $str , ENT_COMPAT , " UTF-8 " ) ; //显示(源代码里面) &lt;a href='test'&gt;涓枃&lt;/a&gt;
echo html_entity_decode ( htmlentities ( $str , ENT_COMPAT , " UTF-8 " ) , ENT_COMPAT , " UTF-8 " ) ; // 显示(源代码里面) <a href='test'>中文</a>
?>

这里再给出一个匹配UTF-8中文字符的正则表达式:

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$word = " 中文 " ;
if ( preg_match ( " /^([ " . chr ( 228 ) . " - " . chr ( 233 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}){1}/ " , $word ) == true || preg_match ( " /([ " . chr ( 228 ) . " - " . chr ( 233 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}){1}$/ " , $word ) == true || preg_match ( " /([ " . chr ( 228 ) . " - " . chr ( 233 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}[ " . chr ( 128 ) . " - " . chr ( 191 ) . " ]{1}){2,}/ " , $word ) == true )
{
echo " 很好,这是一个UTF-8编码的汉字 " ;
}
else
{
echo " 抱歉,这不是一个UTF-8编码的汉字 " ;
}
?>

4、HTML:在<head></head>标签对里面加上

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

5、JS:JS的问题比较复杂,如果直接将文件存为UTF-8的编码,那么当用户在直接用浏览器访问这个页面的时候(也许某些程序员会这么做),浏 览器可能会使用其它的编码去读取这个文件而造成其中的UTF-8中文乱码,当然,这并不会影响到程序的运行。在加载JS的时候,可以说明一下载入JS的编 码,当然,如果已经在HTML头里面声明了编码,这里就不是必须的了:

<script type="text/javascript" language="javascript" src="scripts/output.js" charset="UTF-8"></script>

JS要注意的另一个问题是他的escape()函数,在ECMAScript v3中,escape( ) 会被剔除,建议使用encodeURI( )和encodeURIComponent( )。这可以帮助你远离escape()函数引起的乱码问题。

6、CSS:在CSS文件的头部加上这行代码:

@charset "UTF-8";

7、URL:为了让URL变得更为友好,许多PHP程序员喜欢让URL显示文字而不是URL编码,目前较为合理的解决方案是将GET方法发送的数据 转为GBK编码,然后再接受这些数据,如果你希望使用UTF-8直接友好的GET数据,你会在使用PHP的$_GET数组时遇到一些问题。

8、Email:使用UTF-8编码的字符发送邮件,也是一件让人头疼的事情,理想的方法是将编码转变为GBK,然后再发送。

9、Ajax:使用POST的方式发送数据,不要使用GET的方式,不然无法成功发送部分UTF-8中文字符。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值