Знаете-ли-что? скрипт
Материал из Letopisi.Ru — «Время вернуться домой»
Текст скрипта для чтения новостей Летописи
<?php
header('content-type: application/x-javascript; charset=windows-1251');
function utf8win1251($s){
$out=""; $c1=""; $byte2=false;
for ($c=0;$c<strlen($s);$c++){
$i=ord($s[$c]); if ($i<=127) $out.=$s[$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; }
$src = file_get_contents("http://letopisi.ru/index.php/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%97%D0%BD%D0%B0%D0%B5%D1%82%D0%B5_%D0%BB%D0%B8_%D0%B2%D1%8B");
$tmp = preg_replace('/.*<ul><li>(.*)<\/ul>.*<div class="printfooter">.*/s', '$1', $src);
$tmp = trim(preg_replace('/href="/', 'href="http://letopisi.ru', $tmp));
$matches = explode('</li>', $tmp);
if (sizeof($matches) > 1) {
$trans = Array("\x0D" => "", "\x0A" => " ");
do {
$quote = trim($matches[rand(0, sizeof($matches)-2)]);
} while (empty($quote));
$quote = str_replace('<li>', '', utf8win1251(strtr($quote, $trans)));
$quote = preg_replace('/<div class="thumb.*<\/div>/', '', $quote);
$quote = str_replace('"', '\"', $quote);
print 'document.write("' . $quote . '");';
}
?>
Внимание!
Регулярные выражения, использующиеся, в частности, и в PHP, по умолчанию 'жадные' (greedy). То есть, например, фрагмент '.*' захватит максимально возможное число символов, при котором еще можно выполнить остальные требования выражения. В результате в данном случае будет выводиться не случайный, а всегда последний элемент списка. Чтобы 'вылечить от жадности' регулярное выражение достаточно поставить после 'звездочки' вопросительный знак. В данном случае следует поменять строчку
$tmp = preg_replace('/.*<ul><li>(.*)<\/ul>.*<div class="printfooter">.*/s', '$1', $src);
на
$tmp = preg_replace('/.*?<ul><li>(.*)<\/ul>.*?<div class="printfooter">.*/s', '$1', $src);
Нужно заметить, что про описанную особенность работы регулярных выражений почему-то забывают даже авторы серьезных и подробных книг по PHP.






