我有一个表table1里面有一个键值 xtext,它的内容是“达吉斯坦一直以来都是车臣恐怖分子实施恐怖活动的重要地方,这里发生的袭击事件远远多于莫斯科。”我通过下面部分代码实现<?php
$exec="select * from table1 where xtext like '%的%' order by ..";
$result=mysql_query($exec,$conn);
while($rs=mysql_fetch_object($result)){
?>
<?php echo $rs->xtext?>
<?php
}
?>我想让显示结果为1、显示结果只显示15个字(标点符号不算)
2、以第一个和关键字一样的词为基准,从这个词开始向后显示
3、所有在显示结果中的关键字都是红色比如上面的那段话,就变成的重要地方,这里发生的袭击事件远其中两个的都显示为红色,请问这个该怎么做呢?
$exec="select * from table1 where xtext like '%的%' order by ..";
$result=mysql_query($exec,$conn);
while($rs=mysql_fetch_object($result)){
?>
<?php echo $rs->xtext?>
<?php
}
?>我想让显示结果为1、显示结果只显示15个字(标点符号不算)
2、以第一个和关键字一样的词为基准,从这个词开始向后显示
3、所有在显示结果中的关键字都是红色比如上面的那段话,就变成的重要地方,这里发生的袭击事件远其中两个的都显示为红色,请问这个该怎么做呢?
header("Content-type:text/html;charset=utf-8");
$c = '达吉斯坦一直以来都是车臣恐怖分子实施恐怖活动的重要地方,这里发生的袭击事件远远多于莫斯科。';
$o = preg_split("/(?=的)/",$c,2);
$limit = 15;
$i = 0;
$j = 1;
$newStr = array();
while($j <= $limit)
{
if( !isset($o[1]{$i}) ) break;
$char = $o[1]{$i}.$o[1]{$i+1}.$o[1]{$i+2};
if(!in_array($char,array(",","。",";")))//这个中文标点符号数组应该定义一个全局性的数组
{
$j++;
}
$i += 3;
$newStr[] = $char;
}
echo str_replace("的","<font color=red>的</font>",implode("",$newStr));
这里用正则判断下utf-8字符区间,然后才决定应取几位字符,否则里面有个ascii,或则utf-8非3字符的就错了。
==========================
说错,用ord
function chinasubstr($str,$start,$length){
$startlength = $start+$length;
for($i=0;$i<$startlength;$i++){
if(ord(substr($str,$i,1))>127){ //如果是汉字字符
$strtemp .= substr($str,$i,2);
$i++;
}else{ //如果是英文字符
$strtemp .= substr($str,$i,1);
}}
return $strtemp;
}
?>
以上是截取中英文字符串的自定义函数;
<?php
$exec="select * from table1 where xtext like '%的%' order by ..";
$result=mysql_query($exec,$conn);
while($rs=mysql_fetch_object($result)){
?>
<?php
preg_match('/的/',$rs->xtext,$arr);?> //$arr返回出现第一个"的"字以后的字符
$inputstr=chinasubstr($arr,0,30); //$inputstr返回$arr字符串中15个中文字符串
echo str_ireplace('的',"<font color='red'>的</font>",$inputstr);
//把最终结果中的"的"进行描红输出
?>
<?php
}
?>