2

I want to check whether special characters such as "<" ">" or the double quote itself is found in a string. But my function always return true.

Thank you

This is the code:

$name = "<h1><dfdafdfds";

function correctName($name){
    if (strlen($name) < 5 || (strpos($name, "<")===true) || 
    (strpos($name, ">")===true) || (strpos($name, "\"")===true)){

        return false;
    }else{
        return true;
    }
}
4

2 回答 2

6

Strpos either returns false or an integer value such as 5. It does NOT return true.

Therefore (strpos($name, "<")===true always returns false.

your code evaluates as:

if (strlen($name) < 5 || false) || 
(false) || (false)){

    return false;
}else{
    return true;
}

You need to use this format:

strpos($name, '<') !== false

so your code should look like:

if (strlen($name) < 5 || strpos($name, "<") !== false || strpos($name, ">") !== false || strpos($name, "\"") !== false) {
于 2012-08-24T06:12:45.657 回答
1

strpos never returns TRUE. It might return FALSE. Solution: change your comparisons to !== FALSE

于 2012-08-24T06:15:28.223 回答