PHP怎样过滤中文状态下特殊字符(比如标点符号)?

如题所述

function filterGBK_SpecialChars($str)
{
$str =urlencode($str);//将关键字编码
//下面的必须写在一行,不可换行截断
$str=preg_replace("/(%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|
%2A|%28|%29|%2B|%7C|%5C|%3D|\-|_|%5B|%5D|%7D|%7B|%3B|%22|%3A|
%3F|%3E|%3C|%2C|\.|%2F|%A3%BF|%A1%B7|%A1%B6|%A1%A2|%A1%A3|%A3%AC|
%7D|%A1%B0|%A3%BA|%A3%BB|%A1%AE|%A1%AF|%A1%B1|%A3%FC|%A3%BD|%A1%AA|
%A3%A9|%A3%A8|%A1%AD|%A3%A4|%A1%A4|%A3%A1|%A1%AB|%A3%FB|%A3%FD|%A1%BE|
%A1%BF|)+/",'',$str);
$str =urldecode($str);//将过滤后的关键字解码
return $str;
}
$str='广~·@#¥%……&*()——+|-=、{}【】:;“”‘’~“《》,。?、州;?海【,鲜。餐“”】(,厅) ';
echo filterGBK_SpecialChars($str);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-08
PHP 中的 htmlspecialchars()、preg_replace() 函数可以实现

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >

htmlspecialchars(string,quotestyle,character-set)

参数说明
string 必需。规定要转换的字符串。
quotestyle 可选。规定如何编码单引号和双引号。

ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。

preg_replace() 执行一个正则表达式的搜索和替换

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索subject中匹配pattern的部分, 以replacement进行替换.

pattern
要搜索的模式. 可以使一个字符串或字符串数组.
可以使用一些PCRE修饰符, 包括'e'(PREG_REPLACE_EVAL), 可以为这个函数指定.
replacement
用于替换的字符串或字符串数组.

例如:
<?php
$str = "<strong>字符字符字符字符字符字符';\t\r</strong>";
$str = preg_replace("/\'/",'',$str);
echo htmlspecialchars($str);
?>