优化了的addslashes()函数:daddslashes,有需要的朋友可以看看。
物件是老了点,但很实用。
if(!$GLOBALS['magic_quotes_gpc'] || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
说明:
string addslashes ( string str )
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。
一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O’reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\’reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ‘ 时将使用 ‘ 进行转义。
默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
一个php文本采集类,有需要的朋友可以看看。
使用示例:
$C->url = 'http://www./subject_search?cat=1001&search_text=%E5%B9%B4%E8%BD%BB%E4%BA%BA';
$C->startFlag = '<p ></p>';
$C->endFlag = '<div >';
$C->init();
$C->regExp = "|<div m\"><a href=/index.html"(.*)\">(.*)</a></div><p pl\">(.*)</p>|Uis";
$C->parse();
print_rr($C->result);
*/
php文本采集类文件:
<%
/**
模块名:php文本采集类
**/
class Collection{
//入口 公有
var $url; //欲分析的url地址
var $content; //读取到的内容
var $regExp; //要获取部分的正则表达式
var $codeFrom; //原文的编码
var $codeTo; //欲转换的编码
var $timeout; //采集等待的时间
var $startFlag; //文章开始采集的标志 默认为0 在进行采集条目时,只对$startFlag 和 $endFlag之间的文字块进行搜索和采集。
var $endFlag; //文章结束采集的标志 默认为文章末尾 在进行采集条目时,只对$startFlag 和 $endFlag之间的文字块进行搜索和采集。
var $block; //$startFlag 和 $endFlag之间的文字块
//出口 私有
var $result; //输出结果
//初始化收集器
function init(){
if(empty($url))
$this->getFile();
$this->convertEncoding();
}
//采集所需内容
function parse(){
$this->getBlock();
preg_match_all($this->regExp, $this->block ,$this->result,PREG_SET_ORDER);
return $this->block;
}
//错误处理
function error($msg){
echo $msg;
}
//读取远程网页 如果成功,传回文件;如果失败传回false
function getFile(){
$datalines = @file($this->url);
if(!$datalines){
$this->error("can't read the url:".$this->url);
return false;
} else {
$importdata = implode('', $datalines);
$importdata = str_replace()(array ("\r\n", "\r"), "\n", $importdata);
$this->content = $importdata;
}
}
//获取所需要的文字块
function getBlock(){
if(!empty($this->startFlag))
$this->block = substr($this->content,strpos($this->content,$this->startFlag));
if(!empty($this->endFlag))
$this->block = substr($this->block,0,strpos($this->block,$this->endFlag));
}
//内容编码的转换
function convertEncoding(){
if(!empty($this->codeTo))
$this->codeFrom = mb_detect_encoding($this->content);
//如果给定转换方案,才执行转换。
if(!empty($this->codeTo))
$this->content = mb_convert_encoding($this->content,$this->codeTo,$this->codeFrom) or $this->error("can't convert Encoding");
}
}//end of class
?>
获得UTF8编码的字符串的长度的函数:utf8_strlen,有需要的朋友可以参考下。
/*
* 用于UTF8编码的程序
* 获得字符串的长度,一个中文表示3个长度
*/
function utf8_strlen($str) {
$count = 0;
for($i = 0; $i < strlen($str); $i++){
$value = ord($str[$i]);
if($value > 127) {
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return $count;
}
?>