现在在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));
}