请教一个问题? 假如有一段字符串,比如:“这是'一段1中a,$,#文字x符c串”,请教一下大家,有什么方法可以过滤掉非文字的字符吗?比如最终我想输出:“这是一段中文字符串” 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 str_replace替换根据字符UNICODE的值判断字符是否符合标准,网上有非文字字符的判断实例. 下面是我用的一个函数,你把函数中取字符串的位置处理一下,返回字符串就行了//取出特定长度的字符串,并以一定字符结尾 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); } preg_replace("/[\da-zA-Z\W]+/si","",$string); $str = "这是'一段1中a,$,#文字x符c串";echo preg_replace('/[\x00-\x7F]/', '', $str); php模拟多线程. 这fputs貌似不行呢~ 哪位帮忙看一下以下测试php64位的程序如何理解?谢谢 global 变量在大并发环境是线程安全的吗? php simplexml类,怎样创建CDATA的节点 使用和学习PHP,需要先下载网上哪些开发工具?请大家介绍一下,我也好准备一下 请问php有没有办法获取本机ip?注:我不是菜鸟,呵呵 大家帮忙推荐一个好点的 CVS 工具 mysql不能启动!!!! 不知道那里错了,愿意帮忙看看的请进,几句话。 关于php做图的问题? 请教高手:不知为什么,页面总自己响一下,跟刷新不太一样 请问ipad 播放器是怎么实现的
根据字符UNICODE的值判断字符是否符合标准,网上有非文字字符的判断实例.
//取出特定长度的字符串,并以一定字符结尾
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);
}
echo preg_replace('/[\x00-\x7F]/', '', $str);