Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: PHP. Определение длинны строки
цитата
09/04/11 в 19:07
 FXIX
Код:

Цитата:

$a1='qwerty';
$a2='абвгде';

echo strlen($a1);
echo "\n";
echo strlen($a2);
echo "\n";


echo mb_strlen($a1);
echo "\n";
echo mb_strlen($a2);
echo "\n";


echo iconv_strlen($a1);
echo "\n";
echo iconv_strlen($a2);
echo "\n";


echo preg_match("~.{7}~is", $a1); # при 6 - вернет 1
echo "\n";
echo preg_match("~.{13}~is", $a2); # при 12 - вернет 1
echo "\n";


Вывод:
Цитата:

6
12
6
12
6
12
0
0


Просто узнать, текст больше 6 символов или нет. Просто символы посчитать.
цитата
09/04/11 в 19:12
 taj
mb_strlen($b,'utf8');
цитата
09/04/11 в 19:12
 Alexandur
Код:
echo mb_strlen($a2, 'UTF-8');
цитата
09/04/11 в 19:19
 FXIX
нене. кодировка неизвеста. просто на входе текст неизвестного языка и кодировки. проверить граничное условие - текст вообще имеет внутри себя что-то осмысленное (3 предложения к примеру) или нет.
цитата
09/04/11 в 19:27
 Alexandur
Если язык неизвестен, ты длину не определишь.

С определённой вероятностью:
http://php.net/manual/en/function.mb-detect-encoding.php
цитата
09/04/11 в 20:04
 FXIX
да уж. придется паллиатив
if(preg_match("~.{400}~is", $text)==0) {$short=TRUE;} # 200 символов русского текста в UTF-8, 400 символов анг
цитата
09/04/11 в 20:36
 freeek
а если так?

Код:
  if(isset($a1{6})){
    //Больше 6 символов
  }
цитата
09/04/11 в 21:29
 FXIX
неа. не работает.

var_dump( isset ($a1{6}) );
var_dump( isset ($a2{6}) );

вывод:
bool(false)
bool(true)

а вот интересно, говорят в питоне с этим проблем нет. а в пхп проблема якобы в СИ. питон почему не страдает этим?
цитата
12/04/11 в 22:02
 taj
потому что в питоне все по другому)
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)

Начиная с Python версии 3.0, строковый тип поддерживает только Unicode, да и в 2.х я таких проблем не встречал, т.к. всегда и везде использую только юникод - это спасает от массы проблем.
цитата
12/04/11 в 22:53
 FXIX
taj писал:
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)

ну mb_strlen($b,'utf8') это решение конечно. пока нормальное более менее. может пхп6 перестанет страдать этим
цитата
13/04/11 в 15:59
 samedi
Код:
strlen(utf8_decode($a))

Но mb_strlen() должна быть быстрее.


Эта страница в полной версии