现在有个需求:字符串A与字符串B,字符串B中包含字符串A,利用字符串A将字符串B中的A替换成其他字符串或删除。
利用PHP函数,str_ireplace() 与 str_replace() 可以做到。
一、str_ireplace(find,replace,string,count) 函数使用一个字符串替换字符串中的另一些字符(该函数对大小写不敏感)。
例如:
代码如下 | 复制代码 |
<?php |
二、str_replace(find,replace,string,count) 函数使用一个字符串替换字符串中的另一些字符(该函数对大小写敏感)。
(参数与描述同 str_ireplace() 函数)
代码如下 | 复制代码 |
<?php |
上面要替换肯定全部替换了,我如果想只替换第一次出现的字符呢
很多人想到了用str_replace()函数,看看这个函数的使用是不是我们要的
str_replace( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
不小心还真以为是我们想要的呢,最后那个参数是返回替换发生的总次数,它是一个引用变量,而不是我要想要的指定它将替换几次,所以用str_replace()是不行的
preg_replace()是可以实现的,可惜用了正则,
代码如下 | 复制代码 |
$str=preg_replace('/abc/','xyz',$str,1); |
有没有不用正则的,嗯可以这样
代码如下 | 复制代码 |
$replace='xyz'; |
string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;
使用:
发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.
代码如下 | 复制代码 |
/** |
下面我接着看在转换字符编码的一些问题
用mb_detect_encoding($str);函数,使用该函数必须打开php的extension=php_mbstring.dll扩展
代码如下 | 复制代码 |
<?php $str="测试ing"; $cha=mb_detect_encoding($str); echo $cha; ?> |
我在gb2312页面上输的,不过输出的结果是 UTF-8 很奇怪,还没有找到原因。
我想统一转换为UTF-8编码,用下面方法
代码如下 | 复制代码 |
<?php $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv($cha,"UTF-8",$str); var_dump($s); ?> |
结果返回:
string(0) “”
真是奇怪,为什么会这样。
用
代码如下 | 复制代码 |
<?php $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv("GB2312","UTF-8",$str); var_dump($s); ?> |
返回结果正确。发现该函数mb_detect_encoding($str);判断还是不准确。不知是什么原因。
函数string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
可以转换为指定编码的字符串,我写了例子
代码如下 | 复制代码 |
<pre lang="php" line="1"> <?php $a="我很好"; echo mb_convert_encoding ($a,'UTF-8'); ?> |
可结果是:
??潞?潞?
现在的问题就是我如果把不同的字符串编码形式统一转换为utf-8,如果事先知道改变吗可以用iconv,但如果不知道该编码该怎么办呢?
问题3:iconv问题,如果转换的字符串,第一个字节的编码大于一定的数会返回空.
如:
代码如下 | 复制代码 |
<?php $str=chr(254)."测试ing".chr(254); $s = iconv("GB2312","UTF-8",$str); var_dump($s); ?> |
返回
string(0) “”
mb_convert_encoding的用法见官方:
http://cn.php.net/manual/en/function.mb-convert-encoding.php
PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。
下面还有一些详细的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)
用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;
string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.
使用:
发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.
from_encoding is specified by character code name before conversion. it can be array or string – comma separated enumerated list. If it is not specified, the internal encoding will be used.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);
例子:
代码如下 | 复制代码 |
<?php |
例子
这个可以根据输入输出的字符编码进行转换
代码如下 | 复制代码 |
<?php |
递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行。
我们来看一个经典的递归删除函数
函数的作用:删除目录下面的所有文件,并删除目录
函数代码:
代码如下 | 复制代码 |
<?php 使用实例:Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除 <?php |
说明:首先判断Public是否存在,如果在则打开Public,然后使用readdir循环读取Public目录里的内容,如果存在"."和".."这两个特殊目录则排除掉。如果遇到文件夹则调用自身处理,直到条件不满足。遇到文件则直接删除掉。最后层层跳出删除Public。
实例二,删除非空目录
代码如下 | 复制代码 |
/* }
//如果php文件不是ANSI,而是UTF-8模式,而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码 my_del($path); |
例3,可查看成功之失败原因
代码如下 | 复制代码 |
<?php functiondeletedir($dir){ if(!handle=@opendir($dir)){//检测要打开目录是否存在 die("没有该目录"); } while(false!==($file=readdir($handle))){ if($file!=="."&&$file!==".."){//排除当前目录与父级目录 $file=$dir.DIRECTORY_SEPARATOR.$file; if(is_dir($file)){ deletedir($file); }else{ if(@unlink($file)){ echo"文件<b>$file</b>删除成功。<br>"; }else{ echo"文件<b>$file</b>删除失败!<br>"; } } } if(@rmdir($dir)){ echo"目录<b>$dir</b>删除成功了。<br>n"; }else{ echo"目录<b>$dir</b>删除失败!<br>n"; } } //测试程序 $dir="/var/www/test"; deletedir($dir); ?> |
在/var/www/test文件夹下建一写文件夹和文件测试
shell>touchaaa
shell>touchbbb
shell>touchccc
shell>toucheee
shell>touchffff
shell>mkdir111
shell>mkdir222
shell>mkdir333
分别再在111,222,333文件夹下建写文件这里就不多说了,然后给他们权限
shell>chown[url]www.www[/url]test-R
首先来看下两个方法的定义:
函数原型:array split (string $pattern, string $string [, int $limit])
函数原型:array explode ( string $separator, string $string [, int $limit])
初看没有啥差别,貌似功能都一样。我就犯了这个错误。 请注意两个函数的第一个参数string $pattern和string separator,一个是$pattern说明是正则字符串,一个是$separator是普通字符串。 看下面的代码:
代码如下 | 复制代码 |
$test = end(explode('.', 'abc.txt')); echo $test;//output txt 换成: $test1 = end(split('.','abc.txt')); echo $test1;//no output |
用split的正确做法是:加转义符号
$test1 = end(split('.','abc.txt'));
echo $test1;//output txt
分析:"." 符号是正则表达式的关键字所以split无效,而explode有效。
解析可能用斜线,点,或横线分割的日期:
例子 2. split() 例子
<?php
// 分隔符可以是斜线,点,或横线
$date = "04/30/1973 ";
list($month, $day, $year) = split ( '[/.-] ', $date);
echo "Month: $month; Day: $day; Year: $year <br /> n ";
?>
想仿效 Perl 中类似的 @chars = split( ' ', $str) 行为,请参考 preg_split() 函数中的例子。
注意 pattern 是一个正则表达式。如果想要用的分割字符是正则表达式中的特殊字符,要先将其转义。如果觉得 split()(或其它任何 regex 函数)行为古怪的话,请阅读包含在 PHP 发行包中 regex/ 子目录下的 regex.7 文件。该文件是手册页面格式
在php中Constant与Define是常量那么下面我介绍一个方法能实现动态来使用Constant与Define值方法,希望对各位同学有所帮助。PHP 要秀出 或 使用 动态 Constant / Define 值, 要如何使用呢? ex: 下述范例是动态变数, 但是动态 Constant 要如何使用?
代码如下 | 复制代码 |
|
PHP 使用 动态 Constant / Define 值
可以使用 constant() 来达成使用 Constant 的值, 范例如下:
代码如下 | 复制代码 |
<?php |