Php 仅回显数字/波斯语/拉丁语字符
我需要一个干净的字符串 我只想要数字/波斯语/拉丁语Php 仅回显数字/波斯语/拉丁语字符,php,Php,我需要一个干净的字符串 我只想要数字/波斯语/拉丁语 function clean($str) { global $mysqli; $str = @trim($str); if(get_magic_quotes_gpc()) { $str = stripslashes($str); } return mysqli_real_escape_string($mysqli,preg_replace("/^(?!.*[(@#!%$&*)])
function clean($str) {
global $mysqli;
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysqli_real_escape_string($mysqli,preg_replace("/^(?!.*[(@#!%$&*)])[A-Za-z\s\x{0600}-\x{06FF}0-9_\.\-]+$/u","",$str));
}
echo clean('a|"bc!@£d012e^&$ییییfg');
i want this =>//echo abcd012eییییfg
i dont want have any => ( @,#,!,%,$,&,|,",£,^* )
让这个旋转一下。它只使用正则表达式:
function clean($str){
$re = "/([0-9a-zA-Z\x{600}-\x{6FF}])/u";
preg_match_all($re, $str, $matches);
return isset($matches[0]) ? implode($matches[0]) : '';
}
echo clean('a|"bc!@£d012e^&$ییییfg');
// output: abcd012eییییfg
echo clean('a|"bc!@Β£d艾β012艾e^&$ییییfg');
// output: abcd012eییییfg
如上所述,波斯字符介于600
和6FF
您可以看到它:您可以尝试以下正则表达式:
function clean($mysqli,$str) {
//global $mysqli; //pass this as a parameter
if (!is_string($str)) {
return "";
}
$str = trim($str); //Don't need to suppress errors
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysqli_real_escape_string($mysqli,preg_replace("/[^0-9a-zA-Z\x{600}-\x{6FF}]/u","",$str));
}
作为补充说明:
不要使用mysqli\u real\u escape\u string
作为清理用户输入的手段,它是不可信的,尤其是在处理UTF-8输入时,请使用准备好的语句。
详细说明:
假设您有以下代码:
$sql = "INSERT INTO table VALUES(".clean($value).")";
将其更改为:
$sql = "INSERT INTO table VALUES(?)";
if (($s=$mysqli->prepare($sql)) {
$stmt->bind_param("s", preg_replace("/[^0-9a-zA-Z\x{600}-\x{6FF}]/u","",$value)); //MySQL will clean it up.
$stmt->execute();
}
我对波斯语字符有点傻,但只保留数字/拉丁语可能是这样的:
preg_replace(“/[^0-9a-zA-Z]/”,“,$str)
也许你可以为波斯语字符指定一个类似的范围(不知道它是否有效)。这允许使用比问题要求更多的语言。e、 g.a.“公元前!@d艾β012艾e^&$یییییfg'也将包括希腊和中国字符。我的坏。做了一些挖掘并找到了波斯字符的范围。我已经更新了答案Global$mysqli;//避免这种情况。globals是邪恶的。$str=@trim($str);//不要抑制错误。那也是邪恶的。你不明白我必须使用这种方法。你推荐一种方法你必须使用trim
。我明白了,但是你不需要做@trim
,没有理由。如果trim失败了,你最好知道它,而不是假设它起作用,然后得到一个错误再往下走。