Скрипты-полезняшки
В этом посте предлагаю выкладывать всякие часто употребляемые PHP и JS скриптики.Основное условие - маленькие и изящные. Не надо тут классов, библиотек и пр. туфты. Не забываем краткое описание и бибикод [php].
Картинка по запросу "полезняшки"

начнем с часто нужной функции конвертации из UTF-8 в Windows-1251 и обратно. На хостингах довольно часто не стоят всякие дурацкие мбконверты и айконверты.
<?php
function Utf8ToWin($fcontents) {
$out = $c1 = '';
$byte2 = false;
for ($c = 0;$c < strlen($fcontents);$c++) {
$i = ord($fcontents[$c]);
if ($i <= 127) {
$out .= $fcontents[$c];
}
if ($byte2) {
$new_c2 = ($c1 & 3) * 64 + ($i & 63);
$new_c1 = ($c1 >> 2) & 5;
$new_i = $new_c1 * 256 + $new_c2;
if ($new_i == 1025) {
$out_i = 168;
} else {
if ($new_i == 1105) {
$out_i = 184;
} else {
$out_i = $new_i - 848;
}
}
$out .= chr($out_i);
$byte2 = false;
}
if (($i >> 5) == 6) {
$c1 = $i;
$byte2 = true;
}
}
return $out;
}
function WinToUtf8($s) {
$t = '';
for ($i = 0, $m = strlen($s); $i < $m; $i++) {
$c = ord($s[$i]);
if ($c <= 127) { $t .= chr($c); continue; }
if ($c >= 192 && $c <= 207) { $t .= chr(208) . chr($c - 48); continue; }
if ($c >= 208 && $c <= 239) { $t .= chr(208) . chr($c - 48); continue; }
if ($c >= 240 && $c <= 255) { $t .= chr(209) . chr($c - 112); continue; }
if ($c == 184) { $t .= chr(209) . chr(209); continue; };
if ($c == 168) { $t .= chr(208) . chr(129); continue; };
}
return $t;
}
?>
javascript определения IE. Точнее одна строка). В отличии от классических методов, даже если дефолтный браузер стоит, например FF, а зашли через IE - вернет корректно:
<?php
if (window.attachEvent && navigator.userAgent.indexOf('Opera') === -1)//IE
?>
Ещё один javascript, вставки текста в текстовое поле. Например тут этот скрипт срабатывает при клике на "Ответить"
<?php
function voidPutATag(Tag,Tag2)
{
if (window.attachEvent && navigator.userAgent.indexOf('Opera') === -1) {
document.commentform.msg_body.focus();
sel = document.selection.createRange();
sel.text = Tag+sel.text+Tag2;
document.commentform.msg_body.focus();
}
else {
var ss = document.commentform.msg_body.scrollTop;
sel1 = document.commentform.msg_body.value.substr(0, document.commentform.msg_body.selectionStart);
sel2 = document.commentform.msg_body.value.substr(document.commentform.msg_body.selectionEnd);
sel = document.commentform.msg_body.value.substr(document.commentform.msg_body.selectionStart,
document.commentform.msg_body.selectionEnd - document.commentform.msg_body.selectionStart);
var text = document.commentform.msg_body.firstChild;
document.commentform.msg_body.value = sel1 + Tag + sel + Tag2 + sel2;
selPos = Tag.length + sel1.length + sel.length + Tag2.length;
document.commentform.msg_body.setSelectionRange(sel1.length, selPos);
document.commentform.msg_body.scrollTop = ss;
}
}
//пример использования
<body>
<a href="[removed] voidPutATag('<b<','</b<')">b</a>
<p>
<form name="commentform" method="post">
<textarea name="msg_body">
</textarea>
</form>
</p>
</body>
?>
2recoilme: XSS в предыдущем посте вырезался, но идея думаю ясна.
(0)  Написал recoilme, 2008-08-06 11:51:33 ответитьСклонялка комментариев:
<?php function comment_cnt_str($cnt)
{
$cnt = intval($cnt);
$lastdigg = intval(substr(strval($cnt), -1));
switch($lastdigg):
case (1):
$commentstr = "комментарий";
break;
case (2):
case (3):
case (4):
$commentstr = "комментария";
break;
default :
$commentstr = "комментариев";
break;
endswitch;
if ($cnt>10 and $cnt<21) $commentstr = "комментариев";
return $commentstr;
}?>
Иногда катит Plural.
<?phpfunction pluralForm($n, $form1, $form2, $form5)
{
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20) return $form5;
if ($n1 > 1 && $n1 < 5) return $form2;
if ($n1 == 1) return $form1;
return $form5;
}
// пример использования
echo “В Вашем почтовом ящике $n “.pluralForm($n, “письмо”, “письма”, “писем”); ?>
strtolower с этими функциями нифига не пашет:
echo WinToUtf8(strtolower(Utf8ToWin('ЕбАнЫвРоТ !!!!')));
Зато пашет такая сердитая функция:
/* Solution to the Cyrillic and uft-8 */
function cyrillic_strtolower($word) {
$alfavitlover = explode(',', '¸,é,ö,ó,ê,å,í,ã,ø,ù,ç,õ,ú,ô,û,â,à,ï,ð,î,ë,ä,æ,ý,ÿ,÷,ñ,ì,è,ò,ü,á,þ');
$alfavitupper = explode(',', '¨,É,Ö,Ó,Ê,Å,Í,Ã,Ø,Ù,Ç,Õ,Ú,Ô,Û,Â,À,Ï,Ð,Î,Ë,Ä,Æ,Ý,ß,×,Ñ,Ì,È,Ò,Ü,Á,Þ');
for($wr = 0; $wr <= count($alfavitlover); $wr++) {
$word = str_replace($alfavitupper[$wr], $alfavitlover[$wr], $word);
}
return $word;
}
echo strtolower('ЕбАнЫвРоТ !!!!');
С момента публикации прошло... :
<?php
function nice_time($ts) {
$result = array();
$y = floor($ts / 31536000);
if ($y) {
$ts -= $y * 31536000;
$result[] = $y . plural($y, ' год', ' года', ' лет');
}
$y = floor($ts / 2592000);
if ($y) {
$ts -= $y * 2592000;
$result[] = $y . plural($y, ' месяц', ' месяца', ' месяцев');
}
$y = floor($ts / 86400);
if ($y) {
$ts -= $y * 86400;
$result[] = $y . plural($y, ' день', ' дня', ' дней');
}
$y = floor($ts / 3600);
if ($y) {
$ts -= $y * 3600;
$result[] = $y . plural($y, ' час', ' часа', ' часов');
}
$y = floor($ts / 60);
if ($y) {
$ts -= $y * 60;
$result[] = $y . plural($y, ' минуту', ' минуты', ' минут');
}
return join(', ', $result);
}
echo 'С момента публикации прошло ' . nice_time(time() - $public_time);
?>
2skachko: Ты наверно хотел сказать это в ЮТИЭФ)
str2lower в UTF8:
<?php
<?php
//solution to the Cyrillic and uft-8
function strtolower_Cyrillic($word) {
$alfavitlover = explode(',', 'ё,й,ц,у,к,е,н,г,ш,щ,з,х,ъ,ф,ы,
в,а,п,р,о,л,д,ж,э,я,ч,с,м,и,т,ь,б,ю');
$alfavitupper = explode(',', 'Ё,Й,Ц,У,К,Е,Н,Г,Ш,Щ,З,Х,Ъ,Ф,Ы,
В,А,П,Р,О,Л,Д,Ж,Э,Я,Ч,С,М,И,Т,Ь,Б,Ю');
for($wr=0;$wr<=count($alfavitlover);$wr++) {
$word = str_replace($alfavitupper[$wr], $alfavitlover[$wr], $word);
}
return $word;
}
echo strtolower_Cyrillic('СаШа+МаШа');
?>
?>
Преобразует все строки вида http:// в ссылки, если строка заканчивается на gif и т.п. - в картинки, а если человек написал тег
<?php
function urlprocess($text="")
{
//$processedtxt = preg_replace("/[^(\"'>)][wW]{3}[.][a-zA-z.\/0-9-+?=&%;]*/"," <a href=\"\\">".strtoupper('$0')."</a> ",$text);
$text = $this->bb_parse($text);
if (strpos(strtolower("1".$text),"<a")>0 or strpos(strtolower("1".$text),"<img")>0){
return $text;
} else {
$processedtxt = preg_replace_callback(
"#[^(\"')]?[hHtTpP]{4}[:]\/\/[a-zA-z.\/0-9-+?=:,@&~$%\#\[\];]*#",
create_function('$matches',
'$pos = strpos(strtolower($matches[0]),"http");$first=\'\';'.
'if ($pos == 1) {$first=substr($matches[0],0,1); $matches[0] = substr($matches[0],1);}'.
'if (strlen($matches[0])>25) $txt = substr($matches[0],0,25)."..."; else $txt = $matches[0];'.
'$ext= substr(strtolower($matches[0]),strlen($matches[0])-3);'.
'if ($ext == "gif" or $ext == "jpg" or $ext == "png") return "<img src=\"$matches[0]\">";'.
'else return "$first<noindex><a rel=\"nofollow\" target=_blank href=\"$matches[0]\">$txt</a></noindex>";'),$text);
return $processedtxt;
}
}
?>