PHP字符串验证函数编码失败

时间:2013-08-13 20:38:39

标签: php function encoding multibyte

字符串“Árvíztűrőtükörfúrógép”似乎无效。为什么呢?

if(isValid("Árvíztűrő tükörfúrógép",true,true))echo "VALID";else echo "INVALID";

function isValid($s, $abc=false, $accent=false, $numbers=false, $etc="")
{
    $valid="";

    if($abc)
        $valid = "abcdefghijklmnopqrstzuvwxyz";
    if($accent)
        $valid .= "öüóűőúéáí";
    if($numbers)
        $valid .= "0123456789";

    $valid .= $etc;

    for($i=0; $i < mb_strlen($s); $i++){
        $k = false;
        for($j = 0; $j < mb_strlen($valid); $j++){
            if(strtolower(mb_substr($s, $i, 1)) == mb_substr($valid, $j, 1))
                $k = true;
        }
        if(!$k) 
            return false;
    }
    return true;
}

提前感谢您的帮助!

更新#1:

davebobak注意到小写Á不等于á,但为什么?

2 个答案:

答案 0 :(得分:0)

您的测试字符串"Árvíztűrő tükörfúrógép"包含空白(őt之间),这不在您的受限字符列表中。通过这个额外的空白扩展$valid - $abc的字符串,你应该没问题。

答案 1 :(得分:0)

strtolower()不能用于你的Á字符

在我的测试中,

á不等于strtolower(“Á”)。

删除你的Á和空间(就像cars10所说的那样)并且它是有效的。