php正则表达式替换字符串中汉字以外的任意字符

正则匹配中文汉字根据页面编码不同而略有区别:
UTF-8编码:[x{4e00}-x{9fa5}]+/u

$str = "账单123";
//GBK/GB2312使用:
preg_match_all("/[\x80-\xff]+/", $str, $chinese);
//UTF-8 使用:
//preg_match_all("/[\x{4e00}-\x{9fa5}]+/u", $str, $chinese);
print_r($chinese);

乱码应该就是编码没弄对了
之所以乱码,我猜想有这些原因:
文档标题没加utf-8编码标识:
文档编码非utf-8,这个使用编辑器另存为即可;

你的字符串来源非utf-8,比如是从别处抓取而来,比如是从文件中读取而来,而非在自己的页面上定义,那么这个字符串自然就是源头处的编码了,可以使用PHP转码:

$str= iconv('GBK','UTF-8′,$str);
//或:
//$str= mb_convert_encoding($str,'UTF-8','GBK');

string iconv ( string $in_charset , string $out_charset , string $str )
第一个参数:内容原的编码
第二个参数:目标编码
第三个参数:要转的字符串
函数返回字符串

string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
第一个参数:要处理的字符串
第二个参数:目标编码
第三个参数:内容原编码
函数返回字符串

你可能感兴趣的:(php正则表达式替换字符串中汉字以外的任意字符)