我有一个表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、所有在显示结果中的关键字都是红色比如上面的那段话,就变成的重要地方,这里发生的袭击事件远其中两个的都显示为红色,请问这个该怎么做呢?

解决方案 »

  1.   

    utf-8的。仅供参考
    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));
      

  2.   

    $char  = $o[1]{$i}.$o[1]{$i+1}.$o[1]{$i+2};
    这里用正则判断下utf-8字符区间,然后才决定应取几位字符,否则里面有个ascii,或则utf-8非3字符的就错了。
      

  3.   

    这里用正则判断下utf-8字符区间
    ==========================
    说错,用ord
      

  4.   

    <?php
    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 
    }
    ?>