首页 > 编程技术 > php

php explode() array_diff() implode()三个函数

发布时间:2016-11-25 16:48

$str = '数组1,数组2,数组3,数组4';
$array = explode(',',$str); //将规律字符串存入数组

explode() 函数把字符串分割为数组。

语法
explode(separator,string,limit)参数 描述
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的最大数目。


$array = array_diff($array,array('数组2')); //删除指定值的数组项

array_diff()函数比较两个或多个数组,如果第一个数组中的键或值在第二个数组中并未出现,则以一个数组的形式返回这个未在第二个数组中出现的键和值。

syntax
语法
array_diff(array1,array2,array3...)

parameter
参数 description
描述
array1 required. the first array is the array that the others will be compared with
必要参数。指定第一个参与比较的基准数组
array2 required. an array to be compared with the first array
必要参数。指定与第一个数组相比较的第二个数组
array3 optional. an array to be compared with the first array
可选参数。指定与第一个数组相比较的第三个数组


$str = implode(',',$array); //将数组存为规律字符串

implode() 函数把数组元素组合为一个字符串。

语法
implode(separator,array)参数 描述
separator 可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array 必需。要结合为字符串的数组。

说明
虽然 separator 参数是可选的。但是为了向后兼容,推荐您使用使用两个参数。

echo $str;

 

 

我们利用这两个函数来删除字符串最后一个字符是有说法的,rtrim他有默认删除空格和一些特殊字符,但你也可以删除指定字符,页substr我们是取字符长度,自然只要取字符长度减一就行了如下实例。
*/

$str ='abcea';
echo rtrim($str,'a');


//方法二

echo '<br />'.substr($str,0,strlen($str)-1);

substr(str,start,length); 

例:substr('php教程 is very good language',4,5);

输出为 is ve;

当start>str的长度,则返回为();

substr('php is very good language',26,5);

substr('php is very good language',4);

输出为        (空白)

输出为is v     (表明start和langth都为4)

当start为负值,则从str末尾出开始读起(*这时是从-1开始读,而不是从0开始),

substr('php is very good language',-4,5);

输出为uage

当length为负值时,length代表的是从末尾开始读,截取str的结束位置。

substr('php is very good language',4,-5);

输出为is very good lan

explode()把函数字符串分割为数组;

// example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

// example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $gecos."<br>"; // foo
echo $shell; // *

strrev()把字符串从后往前输出

echo strrev("june"); // outputs "enuj"

setlocalhost(content location)设置本地环境.content ,指定需要设置的场景信息常量有(

lc_all – 所有下属的常量
lc_collate – 排列顺序
lc_ctype – 字符分类和转换(例如:将所有的字符转换成小写或大写形式)
lc_messages – 系统信息格式
lc_monetary – 货币 / 通货格式
lc_numeric – 数值格式
lc_time – 日期和时间格式
);location,设置国家区域,例如,chs.

<?php教程
//测试时文件的编码方式要是utf8
$str='中文a字1符';
echo strlen($str).'<br>';//14
echo mb_strlen($str,'utf8').'<br>';//6
echo mb_strlen($str,'gbk').'<br>';//8
echo mb_strlen($str,'gb2312').'<br>';//10
?>

结果分析:在strlen计算时,对待一个utf8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为utf8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .
利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)
echo (strlen($str) + mb_strlen($str,'utf8')) / 2;
例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.
echo mb_internal_encoding();
php内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于gb2312的中文编码,strlen得到的值是汉字个数的2倍,而对于utf-8编码的中文,就是3倍的差异了(在 utf-8编码下,一个汉字占3个字节)。
采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到utf-8的字符串$str长度,可以用 mb_strlen($str,'utf-8')。如果省略第二个参数,则会使用php的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是php核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

php教程 substr_replace替换指定位置字符与内存破坏漏洞

提示和注释
注释:如果 start 是负数且 length 小于等于 start,则 length 为 0。

$username = "zongzi"; 
echo substr_replace($username,'**','1','2');

定义和用法
substr_replace() 函数把字符串的一部分替换为另一个字符串。

语法
substr_replace(string,replacement,start,length)参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换。

正数 - 在第 start 个偏移量开始替换
负数 - 在从字符串结尾的第 start 个偏移量开始替换
0 - 在字符串中的第一个字符处开始替换
 
charlist 可选。规定要替换多少个字符。

正数 - 被替换的字符串长度
负数 - 从字符串末端开始的被替换字符数
0 - 插入而非替换
 
功能同 php的substr_replace()

'参数:被替换的内容,替换内容,起始位,替换长度

function substr_replace(sourcecon,repcon,startx,lenx)
   dim reped
   reped = mid(sourcecon,startx,lenx) '取出原内容同样长度
   dim scleftx,scleft
   scleftx = startx-1
   if scleftx<1 then
    scleft = ""
   else
    scleft = left(sourcecon,scleftx)
   end if
   substr_replace = replace(sourcecon,reped,repcon,startx,1)
   substr_replace = scleft&substr_replace
end function

()中断内存破坏漏洞
bugraq id:
cve id:cve-2010-2190
cncve id:cncve-20102190
 
漏洞发布时间:2010-05-31
漏洞更新时间:2010-06-28
 
漏洞起因
设计错误
危险等级

 
影响系统
php 5.2 <= 5.2.13
php 5.3 <= 5.3.2
 
不受影响系统
 
危害
远程攻击者可以利用漏洞泄漏敏感信息。
 
攻击所需条件
攻击者必须访问使用substr_replace()函数的应用程序。
 
漏洞信息
php是一款流行的网络编程语言。
php的substr_replace()函数存在信息泄漏问题:

php_function(substr_replace)
{
    ...
    if (zend_parse_parameters(zend_num_args() tsrmls_cc, "zzz|z", &str, &repl, &from, &len) == failure) {
        return;
    }
   
    if (z_type_pp(str) != is_array) {
        convert_to_string_ex(str);
    }
    if (z_type_pp(repl) != is_array) {
        convert_to_string_ex(repl);
    }
    if (z_type_pp(from) != is_array) {
        convert_to_long_ex(from);
    }
    if (argc > 3) {
        separate_zval(len);
        if (z_type_pp(len) != is_array) {
            convert_to_long_ex(len);
            l = z_lval_pp(len);
        }
    } else {
        if (z_type_pp(str) != is_array) {
            l = z_strlen_pp(str);
        }
    }
    if (z_type_pp(str) == is_string) {
        if (
            (argc == 3 && z_type_pp(from) == is_array) ||
            (argc == 4 && z_type_pp(from) != z_type_pp(len))
        ) {
            php_error_docref(null tsrmls_cc, e_warning, "'from' and 'len' should be of same type - numerical or array ");
            return_stringl(z_strval_pp(str), z_strlen_pp(str), 1);     
        }

使用不同类型的‘from’和'len'参数调用substr_replace()函数,会触发e_warning错误。如果php没有删除调用时通过引用传递功能,用户空间错误处理器会使用这个中断更改'str'参数类型。如果'str'类型更改为整数类型可导致泄漏任意内存,如果'str'更改为数组,允许泄漏使用重要内存偏移的哈希表。

标签:[!--infotagslink--]

您可能感兴趣的文章: