在Facebook评论部分,当我输入alt + 0173并按回车时,它将我的评论作为空注释提交,我想在我的网站中避免使用以下代码。
if ($react == ''){
#do nothing
} else {
#insert data
}
但它不起作用并插入带有字母“A”的数据,顶部有两个点,见下图。当我复制并过去它显示为“”。
我也尝试以下代码,但它也没有用。
if ($react == '' || $react == 'Â'){
#do noting
} else {
#insert data
}
答案 0 :(得分:0)
我没有验证,但我认为这是你的解决方案:
alt + 0173是ascii char 173,名为Soft hyphen。 这有时用于通过安全脚本,因为您看不到空格但有一个字符。所以你可以使用像bloc + 173 char + ked这样的被阻止的单词在屏幕上显示为被阻止,但有时候安全脚本没有选择它。
以下行通过删除它来阻止使用此字符(无论如何都没有好用)。
把它放在if/else
行之前。
$string = str_replace(chr(173), "", $string);
在你的情况下:
$react = str_replace(chr(173), "", $react);
因此,在您的情况下,如果字符串仅包含alt + 0173 char,则字符串现在应为空。
更新: 但...
在你的情况下,发生了一些奇怪的事情,你说你的输入是alt + 0173,但你得到的是一个Ä是chr(142)。
更奇怪的是,当我要求将字符串恢复为带有ord($react);
的ascii字符时,你得到chr(97)
这是一个小写的'a'。
正如你所说,你使用ajax,但我对ajax的了解很少,所以我无法帮助你,但也许有人可以,所以我希望我澄清一下这个案例。
但我最好的猜测是,当从表单到PHP脚本时,某些内容会改变$react
的值,你应该看看它。
答案 1 :(得分:0)
这种方法帮助我解决了问题。
来源:Remove alt-codes from string
$unwanted_array = array( 'Ä'=>'A' );
$react = strtr( $react, $unwanted_array );
$newreact = preg_replace("/[^A-Za-z]+/i", " ", $react);
if ($newreact == "" || $newreact == " "){
#do nothing
} else {
#insert data
}