如果string等于alt + 0173

时间:2016-02-18 16:30:13

标签: php

在Facebook评论部分,当我输入alt + 0173并按回车时,它将我的评论作为空注释提交,我想在我的网站中避免使用以下代码。

if ($react == ''){
  #do nothing
} else {
  #insert data
}

但它不起作用并插入带有字母“A”的数据,顶部有两个点,见下图。当我复制并过去它显示为“”。

enter image description here

我也尝试以下代码,但它也没有用。

if ($react == '' || $react == '­'){
  #do noting
} else {
  #insert data
}

2 个答案:

答案 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
  }