PHP清除字符串中空白正则表达式
先利用trim系列函数来删除左右空格
代码如下 | 复制代码 |
trim 去除一个字符串两端空格, echo trim(" 空格 ")."<br>"; ?> |
删除所有空格不能使用php trim()函数,因类他也只能是去除两边空闲
代码如下 | 复制代码 |
|
上面只能删除是一些常见的空格了,下面分享一个更具体的。
代码如下 | 复制代码 |
$str = " This line containstliberal rn use of whitespace.nn"; // First remove the leading/trailing whitespace // Now remove any doubled-up whitespace // Finally, replace any non-space whitespace, with a space // Echo out: 'This line contains liberal use of whitespace.' |
中间就是利用了替换连续空格与左右空格之后再利用preg_replace替换去除重复的,然后再用另一个正则表达式[nrt]来查找任何残余的换行符(n), 回车(r), 或制表符(t) 即可。
如
代码如下 | 复制代码 |
<?php |
把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。 FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。
输出的header实际上是这样子:
代码如下 | 复制代码 |
Content-Disposition: attachment; filename=中文 文件名.txt其实按照RFC2231的定义, 多语言编码的Content-Disposition |
应该这么定义:
代码如下 | 复制代码 |
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt" |
即:
filename后面的等号之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来
注意urlencode的结果与php的urlencode函数结果不太相同,php的urlencode会把空格替换成+,而这里需要替换成%20
例1
代码如下 | 复制代码 |
<?php $filename = basename($file); header("Content-type: application/octet-stream"); //处理中文文件名 header('Content-Disposition: attachment; filename="' . $filename . '"'); |
这样我们就完全解决了中文文名乱码这个问题了。
在php中获取文件的mime类型方法有很多种,我们来介绍直接利用mime_content_type()函数判断获取mime类型即可了。mime_content_type返回指定文件的MIME类型,
用法:
代码如下 | 复制代码 |
echo mime_content_type ( 'php.gif' ) . "n" ; echo mime_content_type ( 'test.php' ); |
输出:
image/gif
text/plain
但是此函数在php5.3.0以后就不可用了,如果你是php5.3.0以后版本我们可使用
代码如下 | 复制代码 |
$finfo = finfo_open(FILEINFO_MIME); |
来操作
下面介绍用户自定的我这个是没有php版本限制的。
代码如下 | 复制代码 |
<?php function _getMimeDetect() { function _getMimeType($path) { $path = '1.txt'; //实际上当前路径并不存在1.txt /*End of php*/ |
PHP中常用的关键字
final
1、final只能修饰类和方法,不能修饰成员属性 作用:使用修饰的类不能被继承,修饰的方法不能被覆盖
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为
final,则不能被继承。
Example #1 Final 方法示例
代码如下 | 复制代码 |
<?php class ChildClass extends BaseClass { <?php class ChildClass extends BaseClass { |
static
1.使用static可以修饰成员属性和成员方法,不能修饰类
2.用static修饰的成员属性,可以被同一个类的所有对象共享
3.静态的数据是存在于内存中的数据段中(初使化静态段)
4.静态的数据是在类第一次加载时分配到内存中的,后面用到时就可以直接使用了
5.只要在程序中有这个类名出现,即是类被加载,静态数据就会被分配到内存中了 注:静态的成员都要使用类名访
问,不用创建对象,不要用对象去访问静态成员。 访问方法 类名::静态成员 如果在类中使用静态成员,可以使
用self代表本类 访问方法 self::静态成员
6.静态方法不能访问非静态成员,非静态方法可以访问静态成员,因为非静态成员必须用对象来访问,而静态成员不需
要
例1
代码如下 | 复制代码 |
<?php test(); |
例2
例子:
代码如下 | 复制代码 |
<?php // 子类中输出成员属性值 |
运行该例子,输出:
中国
我是中国人
我是中国人
中国
我是中国人
首先,我们知道PHP中调用实例方法都是通过如:someobj->someFun()调用,那么我们调用静态函数是否也能像C#那样
通过SomeClass->someFun()调用呢?答案是否定的,在PHP中,对静态成员的调用只能通过::的方式进行,如:
SomeClass::someFun()。
代码如下 | 复制代码 |
<?php class TestC { public static $var1=1; public $var2=1; function t1() { self::$var1+=2; echo self::$var1.' '; echo $this->var2.' '; } public static function t2() { self::$var1+=2; echo self::$var1.' '; } } $t=new TestC(); $t->t1(); TestC::t2(); ?> |
const
1.const只能修饰成员属性
2.类中使用const声明常量
3.用法类似定义一般常量
4.访问方式和静态成员是一样的(在类外 类名::常量名,类内 self::常量名)
5.常量一定要在声明时就给初值
语法:
const constant = "value";
例子:
代码如下 | 复制代码 |
<?php public function myCountry() { // 输出常量 // 访问方法 |
运行该例子输出:
中国
我是中国人
PHP中小常用魔术方法:
__call() 在调用对象中不存在的方法时,就会调用此方法。就会出现系统报错,然后程序会退出。声明此方法来对
错误进行操作,阻止程序崩溃。
__toString() 直接输出对象引用时调用,用来快速获取对象的字符串表示的最便捷的方式
代码如下 | 复制代码 |
<?php public function __construct($foo) public function __toString() { $class = new TestClass('Hello');
|
void __clone ( void )
当复制完成时, 如果定义了__clone()方法, 则新创建的对象(复制生成的对象)中的__clone()方法会被调用, 可
用于修改属性的值(如果有必要的话)。
代码如下 | 复制代码 |
<?php public function __construct() { public function __clone() { class MyCloneable function __clone() $obj = new MyCloneable(); $obj->object1 = new SubObject(); $obj2 = clone $obj;
print("Cloned Object:\n"); ?> |
__autoload() 其它的魔术方法都是在类中添加起作用,这个是唯一一个不在类中添加的方法 只要在页面中使用
到一个类,只要用到类名就会自动传进此方法
代码如下 | 复制代码 |
<?php |
Works fine. Then on a subsequent page load:
代码如下 | 复制代码 |
<?php |
Fatal error: The script tried to execute a method or access a property of an incomplete object. Please
ensure that the class definition "MyClass" of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function to load the class definition.
But if you do this instead, it works fine:
代码如下 | 复制代码 |
<?php |
对象串行化:将一个对象转化为二进制串 1.将对象长时间存储在数据库或文件中时 2.将对象在多个PHP文件中传
输时 serialize():参数是一个对象,返回的是一个二进制串 unserialize():参数是对象的二进制串,返回的就是
新生成的对象 __sleep() 在序列化时自动调用的方法(serialize) 作用:可以将一个对象部分序列化 只要
这个方法中返回一个数据组,数组中有几个成员属性就序列化几个成员属性,如果不加,所有成员属性都被序列化
__wakeup() 在反序列化时自动调用的方法(unserialize) 也就是对象重新诞生的一个过程
注意事项:PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以当你定义类方法时,除了上述魔术方法,
建议不要以 __为前缀。
在php中我们有大量的可对文件与目录操作的函数,下面我来总结一下这些函数的用法,有需要学习的朋友可参考参考。mkdir();函数
php创建文件夹和文件
///创建文件夹
代码如下 | 复制代码 |
function createdir($dir) { if(file_exists($dir) && is_dir($dir)){//如果存在这个文件并且这个文件是个目录就不动作 } else{ mkdir($dir,0777);//否则就创造这个目录 } } |
file_exists();函数
file_exists -- 检查文件或目录是否存在
代码如下 | 复制代码 |
<?php if (file_exists($filename)) { |
is_dir();函数
is_dir();测试文件是否为目录。
为目录就返回true,不就返回false
is_file();
Is_File('目标文件路径和文件名')
为文件返回"True",不为文件返回"False"。
is_link();
文件系统函数库
is_link();测试文件是否为链接文件。
true 值则表示指定的 filename 存在并为符号链接文件.
rmdir 命令
功能:删除空目录
rmdir [选项] dirname
- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因
保留部分路径,则系统在标准输出上显示相应的信息。
要清空并除去目录,请输入:
rm mydir/* mydir/.*
rmdir mydir
该命令除去 mydir 文件中的内容接着除去空目录。rm 命令显示一条关于尝试除去目录 .(点)和.. (点,点)的错
误消息,然后 rmdir 命令除去它们。
建立一个文件名字为aa.txt
代码如下 | 复制代码 |
$fp=fopen('aa.txt', 'w+'); //建立一新文件 |
unlink()函数
功能:删除文件
unlink($filename)删除文件名为$filename的文件
删除指定目录下的所有文件
代码如下 | 复制代码 |
function dir_clear($dir) { 件 |
列出目录中包括子目录的所有文件程序
代码如下 | 复制代码 |
<?php |
删除指定目录下的所有文件以及所有文件夹以及本身***强烈推荐这种方法!!!
代码如下 | 复制代码 |
function rmdir_tree($dirname)//定义一个函数rmdir_tree,要删除的文件名为$dirname { $handle=opendir($dirname);//打开名为$dirname的文件夹 while ($file=readdir($handle)) //跑回圈读取打开的文件夹 { if (($file==".") || ($file=="..")) continue;//继续跑的条件,如果不满足就不跑了 $fullname=$dirname."/".$file;//完整的文件名(包括路径) if (filetype($fullname)=="dir") rmdir_tree($fullname);//调用刚刚定义的函数,实现递归 else unlink($fullname);//删除文件 } closedir($handle);//关闭打开了的文件夹 rmdir($dirname);//删除自身(文件夹) } |
相关文章
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
- 今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
- 这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
- 这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25