最近在写一个网站,增加信息的方法有“在网页上手工写入”和“Excel文件导入”。但是在计算导入信息的“行数”是否大于3时,发现两种数据写入方法的换行不一样,数据库中又没有区分导入方法的字段,所以我只能写一个function去区别。
【首先】 PHP中:
“\r” == chr(13),表示移动到当前行的最左边;
“\n” == chr(10),表示移动到下一行,不左右移动;
【不同之处】 通过PHP代码导入到数据库的文本:
1、网页上,换行为“\r\n”;
2、Excel文件中,换行为“\n”,即chr(10);
【举个例子】
1、网页输入字符串:
hello
world
则文本会在数据库中以”hello\r\nworld”的方式存储(网页上是看不到\r\n的,而字符串中会存\r\n)
1、Excel表格输入字符串:
hello
world
则文本会在数据库中以”hello\nworld”的方式存储
【处理办法】
因为两者都有”\n”字符,所以我直接以”\n”字符作为分界点拆分字符串。
【拆分情况】
1、网页传入的数据会被拆分为”hello\r”、”world”两项;
2、Excel传入的数据会被拆分为”hello”、”world”两项;
【结果】数量相同,不影响。
再看一种情况:“hello”和“world”之间有一行是没有文本的,换句话说就是中间空了一行:
hello
word
【拆分情况】
1、网页传入的数据会被拆分为”hello\r”、”\r”、”world”三项;
2、Excel传入的数据会被拆分为”hello”、”“、”world”三项(中间一项为空串);
【结果】数量相同,但明显空串和”\r”项不应该计入行数。
【增加处理办法】还要判断:
1. 是否是空串;
2. 是否只是一个”\r”字符。
最终解决办法【function】如下:
# $testStr 为网页写入的文本或Excel导入的文本
function Test($testStr)
{
$count = 0;
# 以chr(10)为分界点拆分字符串,chr(10)也可以换成"\n"
$strtmp = explode(chr(10),$testStr);
foreach($strtmp as $onestr){
# 1. 文本长度大于1,说明除\r外还有其它字符
# 2. 文本长度为1且字符为\r,则无效
# 3. 文本长度为0的情况,无效
$count += strlen($onestr)>1||(!(""==$onestr)||("\r"==$onestr[0]))?1:0;
# 若有效行数已经等于3,则返回true
if($count>=3) {
return true;
}
}
return false;
}
时间比较紧,先写这么多吧,有什么问题大家可以相互交流交流。