以前收藏的一些代碼

現在在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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章