PHP trim() 函数使用详解

先看trim的详细介绍,要仔细一点阅读,后面有指出容易忽视的地方:

PHP 字符串去除

用于去除字符串首尾空白等特殊符号或指定的字符。

相关函数如下:

  • trim():去除字符串 首尾 空白等特殊符号或指定字符序列
  • ltrim():去除字符串 首 空白等特殊符号或指定字符序列
  • rtrim():去除字符串 尾 空白等特殊符号或指定字符序列
  • chop():同rtrim()
trim()

去除字符串首尾空白等特殊符号或指定字符序列。

语法:

string trim(string str[, charlist])

(*这一句一定要理解清楚)当设定字符序列 charlist 参数时,trim() 函数将去除字符串首尾的这些字符,否则 trim() 函数将去除字符串首尾的以下这些特殊字符:

字符说明
空格
ttab键
n换行符
ra carriage return
空字符
x0Ba vertical tab

例子:

<?php$text = "Hello World ";$trimmed = trim($text);echo $trimmed; //输出"Hello World"echo "
";echo trim($trimmed, "Hdle"); //输出"o Wor"echo "
";echo trim($text, "Hdle"); //输出"o World"?>

从这个例子可以看出,trim() 函数将不会去除非首尾的 charlist 。

----------------------------------------------------------------------------------------------------------

但是,如果你碰到这样的情况,结果会是什么样的?要除去的charlist中间存在和待处理的字符串中有相同的情况下。

她会返回为:

阅读全文 »

12月31

时间管理是大学问。

之前说要发布框架,数据库字典。但是由于私事太多,时间分布够好,导致一直没发布。

虽然框架和数据库字典都有的,只是框架缺乏文档手册、没有注释等等,所以一直没能发布。

争取在端午节后发布吧!

感谢一直关注的朋友!

阅读全文 »

06月03

Discuz!X2 数据字典(已经更新)

目前还在整理,内部交流版,待整理后共享(已经更新,见下面)。

抢先预览一下:

-----------------------------------------------------------------------------

Discuz!X2 数据字典



--------------------------------更新分割线------------------------------------------

↓↓↓CHM格式下载↓↓↓(by Frears

来自 蓝色理想 http://bbs.blueidea.com/thread-3032720-1-2.html


阅读全文 »

04月07

解决php连接mssql的问题。“PHP Startup: Unable to load dynamic library...”

当在php.ini配置好连接php_mssql.dll和在ext目录增加对应的dll文件后,如果在error.log里面出现“PHP Startup: Unable to load dynamic library '..\\..\\php-5.2.14\\ext\\php_mssql.dll'”的问题时。我们可以这样解决:

1. 将这些依赖的dll拷贝到%windir%\system32下
2. 或者将PHP的安装目录添加到%PATH%中

如何添加系统环境变量呢?

进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统)

选择“高级”标签页 ->
点击“环境变量”按钮 -> 
在“系统变量”栏中  ->
找到 Path 这一项 ->
在最后加入你的 PHP 目录和类库所在的路径,包括前面的“;”(例如:;x:\php\php-5.2.14;x:\php\php-5.2.14\ext;)

*添加后,记得重启电脑

 

阅读全文 »

04月04

DiscuzX1.5和X2的function_core.php有哪些差别?

1.updatesession 增加了cookie值ulastactivity优化

2.调整了getuserbyuid,去除了两处条left join,不在调用common_member_count和common_member_status的内容

3.优化了getuserprofile中$data内容获取,避开了不同状态下不必要的查询

4.增加了dintval()取整函数

5.dheader函数增加手机判断

6.增加了手机检测函数checkmobile()

7.lang()增加了手机语言处理,优化了插件语言脚本的加载(设置为了缓存方式),增加{_G/xxx/xxx/xxx/xxx}语言键值

8.checktplrefresh()增加了$targettplname

9.template()增加手机处理,在mobile/目录

10.loadcache()去除了$_G['perm']

11.cachedata()、save_syscache()优化了$isfilecache判断

12.优化了dgmdate()

13.优化block_get(),增加memory('get'...处理

14.增加dstrlen()长度检测函数

15.aidencode()增加$tid参数

16.调整getforumimg()中$key值的加密方式authcode()调整为md5()

17.rewritedata()、rewriteoutput()增加了home_blog、forum_archiver的重写,去除了all_script

18.增加了mobilereplace()、mobileoutput()

19.调整了output()

20.增加了output_replace(),为了配合调整output()、output_ajax()等

21.runhooks()增加了手机处理,增加了HOOKTYPE常量的定义

22.hookscript()中增加home的判断处理,HOOKTYPE来替代hookscript

23.hookscriptoutput()的优化和增加QQ浏览器的相关处理

24.pluginmodule()中的showmessage提示调整

25.checklowerlimit()代码结构简化调整,增加_checklowerlimit()函数

26.updatemembercount()代码结构简化调整,增加_updatemembercount()函数

27.checkusergroup()中的include_once调整为require_once

28.debuginfo()的queries次数调整

29.adshow()中的hookscript优化

30.showmessage()调整增加libfile('function/message')和dshowmessage()

31.submitcheck()增加QQ浏览器相关

32.multi()分页中增加手机翻页处理

33.censor()增加用户组控制url相关处理

34.censormod()增加url处理

35.runlog()调整writelog()来简化代码结构

36.dreferer()增加处理“'&amp;”

37.ftpcmd()增加错误捕获

38.优化diconv转换函数,在能用内置函数的情况就不是用自定义的libfile('class/chinese')

39.增加了getstatus、setstatus函数

40.优化notification_add()函数

41.增加了manage_addnotify()函数

42.sendpm()增加返回操作

43.g_icon()进行了样式调整

44.getposttablebytid()增加了支持$tids (array())

45.调整getposttable(),去除getposttableid()、getcountofposts()、getfieldsofposts()、getallwithposts()

46.优化了insertpost()、updatepost()

47.getcount()进行了结果intval

48.forumperm()优化了认证项,不局限于只有6个认证项

49.manyoulog()进行了状态检测

50.增加了useractionlog()用户动作日志

51.增加了getuseraction()

52.增加了get_url_list() url处理,增加了iswhitelist()、checkurl()

53.增加了update_template_block()

54.对http_build_query函数进行判断处理,无则定义

55.增加getrelatedlink()

56.增加了connect_valid()、connect_get_sig()、connect_get_access_token()QQ互联函数

57.增加getattachtablebyaid()、getattachtableid()、getattachtablebytid()、getattachtablebypid()、getattachnewaid()附件相关函数

58.增加SEO相关函数get_seosetting()

59.增加了strreplace_strip_split()、get_title_page()、getimgthumbname()、updatemoderate()、userappprompt()


阅读全文 »

04月02

简化的if结构

php的if结构为:

if($condition){

     //do something...

}

其实我们可以简化她:

<?php
$needle = false;
!$needle && _e();
function _e(){
echo('needle is false');
}
?>

阅读全文 »

03月31

如何检测是否是蜘蛛访问呢?

我们可以根据useragent来判断。预先定义好蜘蛛spider的useragent和用户浏览器的useragent,然后进行匹配检测。 

function checkrobot($useragent = '') {

static $_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
static $_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';


$useragent = empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent;


if(!strexists($useragent, 'http://') && preg_match("/($_browsers)/i", $useragent)) {
return false;
} elseif(preg_match("/($_spiders)/i", $useragent)) {
return true;
} else {
return false;
}
}

阅读全文 »

03月31

XSS跨站脚本攻击检测

当$_SERVER['REQUEST_METHOD'] 为 'GET' 和$_SERVER['REQUEST_URI']不为空的时候,我们应该进行XSS检测。


function xss_check() {

$tmp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
if(strpos($tmp, '<') !== false || strpos($tmp, '"') !== false || strpos($tmp,'CONTENT-TRANSFER-ENCODING')!==false) {
exit('request_tainting');
}
return true;
}

阅读全文 »

03月31

如何获取客户端的IP地址?

如何获取客户端的ip呢?

下段代码比较经典!

function get_client_ip() {

$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}

阅读全文 »

03月31

重组MD5值函数

<?php

/**
 * 重组md5值
 * @date 2011-03-08
 * @author Aiens
 */
function makeKey($params=array()){
$str = '';
foreach($params as $val){
if(isset($val)){
$str .= $val;
}
}
$needlestr = 'a`b`c`d`e`f`0`1`2`3`4`5`6`7`8`9';
$keystr = 'c`X`y`7`8`L`Q`0`A`a`2`1`P`n`m`w';
$strarr = explode('`',$needlestr);
$keyarr = explode('`',$keystr);
$md5str = md5($str.'blueidea');
$key = '';
for($i=0;$i<32;$i++){
$md5word = substr($md5str,$i,1);
foreach($strarr as $k=>$val){
if($md5word==$val){
foreach($keyarr as $k1=>$val1){
if($k==$k1){
$key .= $val1;
}
}
}
}
}
return $key;
}

?>


简单使用示例:

<?php

$params = ...

阅读全文 »

03月27

HTTP请求类 CURL

<?php
/**
 * aCURL HTTP请求类
 * @date 2011-03-08
 * @author shellbill
 */
 
class aCurl{
private $ch = null; //curl句柄
private $info = array(); //curl执行过程相关信息
//curl setopt信息
private $setopt = array(
   //访问端口
   'port'=>80,
//客户端 USERAGENT,为空则使用用户的浏览器
'userAgent'=>'',
//超时时间
'timeOut'=>30,
//是否使用 COOKIE 
'useCookie'=>true,
//是否支持SSL
'ssl'=>false,
//\是否支持 gzip压缩
'gzip'=>true
   );

/**
* 构造函数
*
* @param array $setopt
*/
public function __construct($setopt=array()){

阅读全文 »

03月27

.htaccess文件来配置PHP错误提示

用.htaccess可以更改PHP的错误显示,相当于修改php.ini,比较方便,咱就不用考虑那一点点效率的影响了。

好了,开始上代码。

关闭错误显示:

 php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

只显示PHP错误:

 php_flag  display_errors        on
php_flag display_startup_errors on
php_value error_reporting 2047

*备注:错误等级相关资料见附1

保存到日志文件:

 # enable PHP error logging
php_flag log_errors on
php_value error_log
/home/aiens/public_html/aiens.cn/aiens_cn_errors.log

附1:

 1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR

阅读全文 »

02月27

PHP判断SSL是否启用,也就是判断HTTPS

非常简单,废话少说,上代码:

/*
* 检测链接是否是SSL连接
* @return bool
*/
function is_SSL(){
if(!isset($_SERVER['HTTPS']))
return FALSE;
 if($_SERVER['HTTPS'] === 1){  //Apache
  return TRUE;
 }elseif($_SERVER['HTTPS'] === 'on'){ //IIS
  return TRUE;
 }elseif($_SERVER['SERVER_PORT'] == 443){ //其他
  return TRUE;
 }
 return FALSE;
}

阅读全文 »

02月27

契约式编程技术

什么是契约式编程呢?

简单说,契约式编程就是在编写类之前,先声明好接口的一种编程方式。

契约式编程有什么好处?

这样的方式能够保证良好的封装线。

打个比方吧。

部署和使用契约式编程,我们在创建应用之前就定义出将要实现的功能,就好比修建楼房之前先画好图纸一样。

契约式编程应用到什么情况?

一般的,团队开发经常会使用契约式编程技术,这样会大大改善流程。我们在实现类之前,定义好类之间的交互行为,是团队成员能够明确对象必须要有什么行为,然手实现就比较快捷,无需瞻前顾后了。接口被完整实现后,测试类只要使用定义在接口上的规则进行就可以了。

我会在以后贴出相关示例。一般都用在程序插件的背景下。

阅读全文 »

02月16

[扫盲]php文件怎么打开?

先来一连串的问题。
问:php文件怎么打开?
问:如何打开PHP文件?
问:php文件用什么打开?
这些都是搜索引擎里面比较火才问题,其实这3个问题就是一个问题,也就是提问的人不知道什么是PHP。

那什么是PHP呢?我们分两种方式解答。
一、通俗式的解答。PHP是一种用来做网站或者web应用的程序语言,如果你是不学计算机或者相关行业的,你了解这么多就可以了。
二、专业式的解答。 PHP(PHP:Hypertext Preprocessor)是一种在电脑上执行的脚本语言,主要用途是在于处理动态网页,也包含了命令列执行介面(command line interface),或者产生图形使用者介面(GUI)程式。 PHP的应用范围相当广泛,尤其是在网页程序的开发上。一般来说PHP大多运行在网页服务器上,通过运行PHP代码来产生用户浏览的网页。PHP可以在多数的服务器和操作系统上运行,而且使用PHP完全是免费的。根据2007年4月的统计数据,PHP已经被安装在超过2000万个网站和100万台服务器上 。PHP是一种 超级文本预处理语言,她是一种嵌入在 HTML 并由服务器解释的脚本语言,而且是不要花钱的动态语言。 现在的PHP定义为:PHP Hypertext Preprocessor,也就是超级文本预处理语言
也就是:
PHP = PHP Hypertext Preprocessor
      = (PHP Hypertext Preprocessor) Hypertext Preprocessor
      = ((PHP Hypertext Preprocessor) Hypertext Preprocessor) Hypertext Preprocessor
      = 你我都晕了......

最后我们来总结一下,php文件怎么打开呢?如果你完全不懂PHP,那么请不要试图来寻求答案了,对你没有意义。一般地,你的电脑获取的PHP文件一般是在下载的时候得到,这时候的PHP文件是没有任何意义的。(可能是你的下载方式有问题,网站拒绝给你真实的下载,一般都是使用迅雷导致);如果你懂PHP,那还用我来扫盲吗?

阅读全文 »

02月09