Дурная работа strlen (PHP)

12
Asar
На сайте с 23.08.2004
Offline
334
1460

Гр-не, почему, ежели посчитать количество латинских символов в строке, переданной через GET с помощью strlen(), то выдается ожидаемый результат, а если количество кириллических символов через urldecode(strlen()), то не_ожидаемый, а тот же, что и без urldecode?

И как эти самые символы тогда посчитать верно?

A0
На сайте с 22.09.2007
Offline
70
#1
Asar:
Гр-не, почему, ежели посчитать количество латинских символов в строке, переданной через GET с помощью strlen(), то выдается ожидаемый результат, а если количество кириллических символов через urldecode(strlen()), то не_ожидаемый, а тот же, что и без urldecode?
И как эти самые символы тогда посчитать верно?

Потому что strlen(urldecode($string)), а не urldecode(strlen($string)).

Solmyr
На сайте с 10.09.2007
Offline
501
#2

strlen(urldecode())

Asar
На сайте с 23.08.2004
Offline
334
#3

Нет, это я просто здесь, в теме форума опечатался. А в оригинале сначала urldecode($str), а потом вообще отдельной строкой strlen($str1)...

A0
На сайте с 22.09.2007
Offline
70
#4
Asar:
Нет, это я просто здесь, в теме форума опечатался. А в оригинале сначала urldecode($str), а потом вообще отдельной строкой strlen($str1)...

Приведите весь код.

urldecode не принимает ссылку на переменную.

Т. е. надо

$str=urldecode($str);

$length=strlen($str);

Asar
На сайте с 23.08.2004
Offline
334
#5

$SearchValue = mysql_escape_string(trim(urldecode($_GET['search'])));

echo strlen($SearchValue);

A0
На сайте с 22.09.2007
Offline
70
#6
Asar:
$SearchValue = mysql_escape_string(trim(urldecode($_GET['search'])));
echo strlen($SearchValue);

Ну правильно. Вы считаете длину строки, в которой все спец. для SQL символы экранированы слэшем. Т. е. прибавьте к длине строки еще количество спец. символов.

$SearchValue = mysql_escape_string($_GET["search"]=trim($_GET['search']));

echo strlen($_GET["search"]);

Т. е. у вас строка

 aga \ aggaa 

будет преобразована в

aga \\ aggaa

и вместо 13 символов (включая пробелы спереди и сзади) у вас будет 12 символов (пробелы убраны, слэш экранирован слэшем). Это как пример.

Asar
На сайте с 23.08.2004
Offline
334
#7

$SearchValue = urldecode($_GET['search']);

echo strlen($SearchValue);

Выводит 4 для запроса из 2 символов... Брр...

dkameleon
На сайте с 09.12.2005
Offline
386
#8

Asar,

strlen не предназначен для работы с не-ANSI шрифтами (однобайтные символы).

с ЮТФ кодировкой пользуйтесь функциями из библиотеки mb_strings

urldecode не нужен скорее всего вообще. разве что вы передаёте энкодированый текст.

Дизайн интерьера (http://balabukha.com/)
Asar
На сайте с 23.08.2004
Offline
334
#9

dkameleon, Да, и правда, выход нашелся в варианте echo mb_strlen($SearchValue, 'UTF-8');

Большое спасибо за наводку.

Artisan
На сайте с 04.03.2005
Offline
375
#10
dkameleon:
не-ANSI шрифтами

Это здесь при чем?

Есть ASCII charset набор знаков,

и много других 8 bit наборов знаков,

ANSI и шрифты из другой темы, ...

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий