PHP中如何过滤掉非汉字字符?

只留下简体和繁体汉字,其他的字符全部过滤掉。yayqi的无法过滤掉中文的标点符号啊?jlake的可以,但是只适合UTF-8编码的,如果是GB2312呢?... 只留下简体和繁体汉字,其他的字符全部过滤掉。
yayqi的无法过滤掉中文的标点符号啊?
jlake的可以,但是只适合UTF-8编码的,如果是GB2312呢?
展开
 我来答
宇宙大师之一
2015-06-05 · TA获得超过3477个赞
知道小有建树答主
回答量:2271
采纳率:52%
帮助的人:719万
展开全部
首先需要先把带有中文的字符串进行编码转化,由GB2312编码转化为UTF-8编码。
这样是为了PHP正则表达式可以正确的去匹配
然后通过preg_match_all()函数以及相应的中文匹配正则表达式,把所有的中文匹配出来
最后,把匹配到的中文字符串再转为B2312编码,这样做是为了可以在网页编码为GB2312上正确显示。

例如:
<?php
$str = "ddddvvv(,中文.)dfdsfds字符啊.";

//把GB2312编码转化为 UTF-8编码
$str = mb_convert_encoding($str, 'UTF-8', 'GB2312');

//正则匹配
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches);

//把匹配到的数组连接为字符串
$str = implode('', $matches[0]);

//把UTF-8编码转化为 GB2312编码
$str = mb_convert_encoding($str, 'GB2312', 'UTF-8');

echo $str;
//输出 中文字符啊
?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a435633
2010-02-08 · TA获得超过1234个赞
知道大有可为答主
回答量:1018
采纳率:0%
帮助的人:0
展开全部
<?php

$str = "a 1b 2b<中文>。xxyy字符";

//转换 GB2312 -> UTF-8
$str = mb_convert_encoding($str, 'UTF-8', 'GB2312');

preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches);
$str = join('', $matches[0]);

//转换 UTF-8 -> GB2312
$str = mb_convert_encoding($str, 'GB2312', 'UTF-8');

echo $str; //输出 中文字符

?>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yayqi
2010-02-07 · TA获得超过656个赞
知道小有建树答主
回答量:752
采纳率:0%
帮助的人:0
展开全部
可用正则表达式:

<?php

$str="abcde我只要汉字abcde";

echo eregi_replace("[^\x80-\xff]","",$str);

?>

//输出“我只要汉字”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式