假如有一段字符串,比如:“这是'一段1中a,$,#文字x符c串”,请教一下大家,有什么方法可以过滤掉非文字的字符吗?
比如最终我想输出:“这是一段中文字符串”

解决方案 »

  1.   

    str_replace替换
    根据字符UNICODE的值判断字符是否符合标准,网上有非文字字符的判断实例.
      

  2.   

    下面是我用的一个函数,你把函数中取字符串的位置处理一下,返回字符串就行了
    //取出特定长度的字符串,并以一定字符结尾
    function substr_utf8($str, $length, $length_more=3, $plus_text='...', $position=0)
    {
    $start_position = strlen($str);
    $start_byte = 0;
    $end_position = strlen($str);
    $end_position_changed = false;
    $end_position_template = 0;
    $count = 0;
    for($i = 0; $i < strlen($str); $i++){
    if($count >= $position && $start_position > $i){
    $start_position = $i;
    $start_byte = $count;
    }
    $temp = $count-$start_byte;
    // die(var_dump($temp).$i.']<br />');
    //die('a');
    if(($count-$start_byte) >= $length) {
    $end_position_template = $i;
    break;
    }
    if(($count-$start_byte)>=$length-$length_more && $end_position_changed == false) {
    $end_position = $i;
    $end_position_changed = true;
    //break;
    }
    $value = ord($str[$i]);
    if($value > 127){
    $count++;
    if($value >= 192 && $value <= 223) $i++;
    elseif($value >= 224 && $value <= 239) $i = $i + 2;
    elseif($value >= 240 && $value <= 247) $i = $i + 3;
    else 
    {
    echo '<script> alert("'.__("Not a UTF-8 compatible string").'"); history.back();</script>';
    exit();
    }
    }
    $count++;
    }
    //die(var_dump($end_position_template).']');
    if( $end_position_template == 0 || $end_position_template == strlen($str) ){
    //die(var_dump(strlen($str)).']]]');
    if( $end_position_template != 0){
    $end_position = $end_position_template;
    } else {
    $end_position = strlen($str);
    }
    //die(var_dump($end_position).']');
    $plus_text = "";
    } else {
    //die("bbb");
    }
    //die(var_dump($plus_text));
    return(substr($str, $start_position, $end_position-$start_position).$plus_text);
    }
      

  3.   

    preg_replace("/[\da-zA-Z\W]+/si","",$string);
      

  4.   

    $str = "这是'一段1中a,$,#文字x符c串";
    echo preg_replace('/[\x00-\x7F]/', '', $str);