以前收藏的一些代码

现在在CSDN开技术博客,收藏代码,记录学习。

1、fgetcsv()函数在Linux上的一个Bug以及解决方案

fgetcsv()在 Linux上有个Bug(该PHP版本未知),就是当csv文件中出现首字是multi-byte的文字时,会将第一个字符的高位去掉,结果造成读入的文件全部乱码。

解决方案:使用PHP重写fgetcsv()函数。

代码如下:

 /**
 * ファイルポインタから行を取得し、CSVフィールドを処理する
 * @param resource handle
 * @param int length
 * @param string delimiter
 * @param string enclosure
 * @return ファイルの终端に达した场合を含み、エラー时にFALSEを返します。
 
*/

 
function fgetcsv_reg(& $handle, $length = null, $d = ',', $e = '"') {
     
$d = preg_quote($d
);
     
$e = preg_quote($e
);
     
$_line = ""
;
     
$eof=false
;
     
while ($eof != true
) {
         
$_line .= (empty ($length? fgets($handle: fgets($handle, $length
));
         
$itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy
);
         
if ($itemcnt % 2 == 0
)
             
$eof = true
;
     }
     
$_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line
));
     
$_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/'
;
     
preg_match_all($_csv_pattern, $_csv_line, $_csv_matches
);
     
$_csv_data = $_csv_matches[1
];
     
for ($_csv_i = 0$_csv_i < count($_csv_data); $_csv_i++
) {
         
$_csv_data[$_csv_i= preg_replace('/^' . $e . '(.*)' . $e . '$/s', '$1', $_csv_data[$_csv_i
]);
         
$_csv_data[$_csv_i= str_replace($e . $e, $e, $_csv_data[$_csv_i
]);
     }
     
return empty ($_line? false : $_csv_data
;
 }

2、PHP对文本内的URL进行Auto Link的处理

文本中会出现有 http:// 这样的链接,我们要使用PHP对它进行处理,显示在页面上的时候自动加上一个链接。

解决方案:使用PHP正则式。

代码如下:

function url_auto_link($input_string, $max_url_length) {
/*

 処理概要说明
 1. preg_match_allでURLに相当する文字列を抽出し、変数$url_stringに代入
 2. その文字列が$max_url_lengthより大きい场合、末尾に"..."を付与し、丸め、$url_short_stringに代入
    その文字列が$max_url_length以下の场合、$url_stringの内容をそのまま$url_short_stringに代入
 3. str_replaceで$url_stringをリンクに置换
 4. 置换后の文字列をprintで出力
*/
 
preg_match_all("/(^|[^="'])(https?|ftp|news)(://[[:alnum:]+$;?.%,!#~*/:@&=_-]+)/",$input_string,$out,PREG_SET_ORDER);
 
for ($i=0;$i<count($out);$i++
){
    
$url_string = $out[$i][2. $out[$i][3
];
    
if (strlen($url_string> $max_url_length
){
        
$url_short_string = substr($url_string,0,$max_url_length. '...'
;
    } 
else
 {
        
$url_short_string = $url_string
;
    }
    
$input_string = str_replace($url_string,"<a href="$url_string" target="_blank">$url_short_string</a>",$input_string
);
 }
 
print $input_string
;
}

3、一段小小的JS代码

 

一段很小的JS代码,是在Tag处理中用到的,点击Tag之后自动添加到Text文本框,并且能够防止重复添加,以空格作为Tag分隔符。

代码如下:

function onAppend(tag){
    
var txtTag=document.getElementById("ProductTagnames"
);
    
var strTag=" "+txtTag.value+" "
;
    
if(strTag.indexOf(" "+tag+" ")<0
){
       txtTag.value
+=" "+
tag;
    }
    txtTag.value
=txtTag.value.replace(/ /g," "
);
    txtTag.value
=txtTag.value.replace(/s+/g," "
);
    txtTag.value
=
trim(txtTag.value);
}
//去左空格; 

function ltrim(s){ 
    
return s.replace( /^s*/""
); 

//去右空格; 

function rtrim(s){ 
    
return s.replace( /s*$/""
); 

//去左右空格; 

function trim(s){ 
    
return
 rtrim(ltrim(s)); 
}
发布了34 篇原创文章 · 获赞 6 · 访问量 13万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章