2012-04-25 79 views
-1

我得到了这样简单的代码被输入:块“和“从输入字段

private function edit_keywords($text) 
{ 
    $tresc = str_replace("\n","",$text); 
    $tresc = str_replace("\r","",$text); 
    if(strpos($text,'"')!==FALSE) 
    { 
     array_push($this->warnings,"Not allowed character found in keywords \"."); 
     return; 
    } 

目前这将阻止”被进入,我想阻止'了。这个怎么做 ?

更换'也没关系。

+0

这是允许的字符一个非常奇怪的限制。为什么你只是禁止在ASCII中找到的引号字符? – Quentin 2012-04-25 13:18:11

+1

我不知道该说些什么。你有检查''''的代码,你不能用同样的方法来检查'''吗?你有替代'\ n'和'\ r'的代码,不能用同样的代替'' '? – JJJ 2012-04-25 13:19:02

+1

只要记住:所有的客户端检查都很容易被忽略,所以所有验证都必须在服务器上重新检查 – 2012-04-25 13:22:04

回答

-1

您可以使用双引号("'")或转义单引号'\''来编写第二个strpos检查单引号。

if(strpos($text,'\'')!==FALSE) 
{ 
    array_push($this->warnings,"Not allowed character found in keywords \"."); 
    return; 
} 

最终,你可能会达到您想要储存所有你想要在一个阵列,以测试字符的复杂程度,并在它们之间迭代,而不是不断地追加新if声明:

$bad_chars = array('"', '\''); 

foreach ($bad_chars as $bad_char) { 
    if (strpos($text, $bad_char) !== false) { 
    array_push($this->warnings,"Not allowed character found in keywords \"."); 
    return; # or break, to stop after the first disallowed characte 
    } 
} 
+0

谢谢。它的工作! – Spacedust 2012-04-25 13:26:49

0

试试这个:

<?php 

private function edit_keywords($text) 
{ 
    $tresc = str_replace("\n","",$text); 
    $tresc = str_replace("\r","",$text); 

    if ((strpos($text,'"')!==FALSE)||(strpos($text,"'")!==FALSE)) 
    { 
     array_push($this->warnings,"Not allowed character found in keywords \"."); 
     return; 
    } 

?> 
+0

我认为你的逻辑与('&&')应该是一个或('||') – 2012-04-25 13:18:58

+0

当然你想要||而不是&& – Nick 2012-04-25 13:20:01

+0

@AdamBatkin Ooooops!真的,只需修复它!:-) – 2012-04-25 13:20:03