strlen - прецакан

PHP_Masters

Registered
Защо понякога strlen-a ми се прецаква, аз си проверявам примерно дали в аден стриг има >= на 3 симвоа и после пиша 1 буква/цифра - изкарва ми съобщението за грешка, но ако напиша 2 или 3 не ми го изкарва трябва да направя >= на 6, за да сработи както трябва
 
Код:
if(mb_strlen($catname)>=3)
{
$rs2=mysql_query('SELECT * FROM cats WHERE name="'.$catname.'"');
if(mysql_num_rows($rs2)==0)
{
$rs=run_q('INSERT INTO cats(name,date_added) VALUES("'.addslashes($catname).'",'.time().')');
}
else
{
$err[]='Въведеното от вас име е вече заето!';
}
}
else
{
$err[]='Името трябва да съръжа поне 3 символа!';
}
 
Я така пробвай.
Код:
if(mb_strlen($catname)>'3' OR mb_strlen($catname)=='3')
{
$rs2=mysql_query('SELECT * FROM cats WHERE name="'.$catname.'"');
if(mysql_num_rows($rs2)==0)
{
$rs=run_q('INSERT INTO cats(name,date_added) VALUES("'.addslashes($catname).'",'.time().')');
}
else
{
$err[]='Въведеното от вас име е вече заето!';
}
}
else
{
$err[]='Името трябва да съръжа поне 3 символа!';
}
 
Така пак се връщаме на strlen и пробвай да видим...
Код:
$catnamelen = strlen($_POST['catname']);

if($catnamelen > '3' || $catnamelen == '3')
{
$rs2=mysql_query('SELECT * FROM cats WHERE name="'.$catname.'"');
if(mysql_num_rows($rs2)==0)
{
$rs=run_q('INSERT INTO cats(name,date_added) VALUES("'.addslashes($catname).'",'.time().')');
}
else
{
$err[]='Въведеното от вас име е вече заето!';
}
}
else
{
$err[]='Името трябва да съръжа поне 3 символа!';
}
 
Функцията не работи коректно с кирилица както спомена колегата. За кирилица една буква се представя с 3 символа, затова се получава така.

За препоръчване е да се използва mb_strlen
 
Не е само mb_strlen($_POST['catname']);

http://php.net/manual/en/function.mb-strlen.php ето виж как е mb_strlen($_POST['catname'], 'windows-1251') примерно ако такъв ти е charset-a в таблицата.

ЕДИТ: и можеш примерно да направиш следното...

$catnamelen = mb_strlen($_POST['catname'], 'windows-1251');

print_r($catnamelen); да видим какво ти извежда..
 
Код:
$catnamelen=mb_strlen($_POST['catname'], "UTF-8");
ако си с утф-8 трябва да е така
едит:изпревалили са ме :)
 
А защо не си изведеш тези променливи които падаваш на функцията да видиш първо какво има в тях.
Също така пробвай двете функции със статични букви, за да видиш какво ти връщат и да знаеш как да проверяваш.

Също можеш да прегледаш mb_internal_encoding
 

Back
Горе