現在在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正則式。
代碼如下:
/*
処理概要説明
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分隔符。
代碼如下:
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));
}