БлогNot. 42 или Длина Строки

42 или Длина Строки

...точней, понадобилась не длина строки, конечно, а количество букв в ней - в применении к набору фраз, который было проще проанализировать скриптом, чем как-то ещё. "Однофразовая" версия скрипта, в которой строка текста тырсится в форму, лежит вот тут, по правде говоря, почти автогенерация кода.

Для общности считает всё в Юникоде. Название скрипта, надеюсь, очевидно, если нет, прочтите вот это:

 42

Полный исходник шыдевра на момент опубликования:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta content="text/html; charset=UTF-8" http-equiv="content-type">
 <title>STRLEN (RU)</title>
</head>
<body>

<?php
function trimall($string) { return trim(preg_replace("/\s+/"," ",$string)); }
 
function magic ($path) {
 @ini_set('magic_quotes_runtime', '0'); @ini_set('magic_quotes_sybase', '0');
 if (@get_magic_quotes_gpc()=='1') $path=stripslashes($path);
 return $path;
}

function get_word_form ($n,$word,$o1,$o2,$o5) {
 if ($n%100>10 and $n%100<20 or $n%10==0 or $n%10>4) $word.=$o5;
 else if ($n%10>1 and $n%10<5) $word.=$o2;
 else $word.=$o1;
 return $word;
}

function checkboxed ($t) { 
 if (empty($t)) $t=0; $t = intval(abs(round($t))); if ($t<0) $t=0; if ($t>1) $t=1; return $t; 
}

$params = array ('text','trim','lettersonly','action');
while (list($num,$var) = each($params)) {
 if (!empty($_POST[$var])) $$var = htmlspecialchars(magic($_POST[$var]));
 else $$var = '';
}
$trim = checkboxed ($trim);
$lettersonly = checkboxed ($lettersonly);
$text=str_replace("[\r\n]","",$text);
echo '
<form name="f1" method="post" action="'.$_SERVER['PHP_SELF'].'">
 <table align="center" border="0" cellpadding="4" cellspacing="0" width="50%">
 <caption>Количество символов или букв в строке</caption>
  <tr>
   <td>Текст:</td>
   <td>
    <input type="text" name="text" maxlength="128" size="64" value="'.$text.'">
   </td>
  </tr>
  <tr>
   <td>Настройки:</td>
   <td>';
$checkbox_values = array ('trim'=>'Удалить лишние разделители','lettersonly'=>'Подсчитать только число букв');
foreach ($checkbox_values as $key=>$value) {
 echo '<input type="checkbox" name="'.$key.'" value="1"'.($$key==1?' checked':'').'>'.$value.'<br>';
}	  
echo '</td>
  </tr>
  <tr>
   <td>&nbsp;</td>
   <td>
    <input type="submit" name="action" value="Вычислить"> 
    <a href="'.$_SERVER['PHP_SELF'].'">Очистить</a>
   </td>
  </tr>
 </table>
</form>';
if (!empty($action)) { 
 if ($trim) $text = trimall($text);
 $len = mb_strlen ($text,'UTF-8');
 if ($lettersonly) {
  $k=0;
  for ($i=0; $i<$len; $i++) {
   $c = mb_substr($text,$i,1,'UTF-8');
   if (mb_strpos(
"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
       ,$c,0,'UTF-8')!==false) $k++;
  }
  $len=$k;
 }
 echo '<table align="center" border="0" cellpadding="4" cellspacing="0" width="50%"><tr><td>';
 echo '<font color="red">[</font>'.($trim==1?$text:preg_replace("/\s/","&#215;",$text)).'<font color="red">]</font><br>';
 echo $len.' '.get_word_form ($len,'символ','','а','ов');
 echo '</td></tr></table>';
}
?>
</body></html>

Между прочим, в 42 года В.И. Ульянов (Ленин) был всего лишь отчаявшимся эмигрантом, грузин Чхартишвили едва опубликовал первую в жизни бредятинку под псевдонимом Акунин, а коммунист Чикатило едва убил первую жертву. Всё впереди, дерзайте :)

 В "дьявольском файле" - сплошные 42

17.02.2014, 21:47 [10194 просмотра]


теги: программирование php числа

К этой статье пока нет комментариев, Ваш будет первым