<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1048561980648134839</id><updated>2012-03-01T11:39:15.358-08:00</updated><category term='xml'/><category term='авторизация'/><category term='эксперименты'/><category term='ИИ'/><category term='тэги'/><category term='jQuery'/><category term='MVC'/><category term='MySQL'/><category term='дизайн'/><category term='фоны'/><category term='фреймворк'/><category term='Паттерны'/><category term='sape'/><category term='Парсинг'/><category term='текстуры'/><category term='Zend Framework'/><category term='профайлер'/><category term='Auth'/><category term='Abstract Factory'/><category term='CodeIgniter'/><category term='Браузеры'/><category term='нейронные сети'/><category term='IDE'/><category term='Горячие клавиши'/><category term='ООП'/><category term='array'/><category term='time'/><category term='Валидация'/><category term='PHP'/><category term='Netbeans'/><category term='DOM'/><category term='mFram'/><category term='HTML'/><category term='Yii'/><category term='IP'/><category term='Notepad++'/><category term='дебаг'/><category term='денвер'/><category term='DATE'/><category term='hotkeys'/><category term='Абстрактная фабрика'/><category term='DEMO'/><category term='Java Script'/><category term='жизнь'/><title type='text'>Andipas</title><subtitle type='html'>Рецепты на php, java script, jQuery</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1267681735159587258</id><published>2012-02-23T23:37:00.005-08:00</published><updated>2012-02-23T23:51:43.719-08:00</updated><title type='text'>Вешаем Fancybox на кнопку button</title><content type='html'>С помощью плагина  &lt;a href="http://fancyapps.com/fancybox/#docs"&gt;fancybox&lt;/a&gt; можно делать замечательные галереи и попапы. В документации есть примеры. Но как повесить его на кнопку?

Вот так:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #009;"&gt;&amp;lt;form action=&lt;span style="color: green"&gt;&amp;quot;/ACTION/FastFindObj&amp;quot;&lt;/span&gt; method=&lt;span style="color: green"&gt;&amp;quot;post&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #009;"&gt;&amp;lt;input name=&lt;span style="color: green"&gt;&amp;quot;fastfind&amp;quot;&lt;/span&gt; class=&lt;span style="color: green"&gt;&amp;quot;fastfind&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;3463&amp;quot;&lt;/span&gt; type=&lt;span style="color: green"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #009;"&gt;&amp;lt;input name=&lt;span style="color: green"&gt;&amp;quot;weiter&amp;quot;&lt;/span&gt; type=&lt;span style="color: green"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009;"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;И используем:&lt;/p&gt;

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;    $(&lt;span style="color: green"&gt;&amp;quot;form&amp;quot;&lt;/span&gt;).fancybox();
    $(&lt;span style="color: green"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;).fancybox();
    $(&lt;span style="color: green"&gt;&amp;quot;input[name=&amp;#039;weiter&amp;#039;]&amp;quot;&lt;/span&gt;).fancybox();
&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

&lt;a href="http://stackoverflow.com/questions/969522/open-fancybox-or-equiv-from-form-input-type-submit"&gt;Больше примеров здесь &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1267681735159587258?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1267681735159587258/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2012/02/fancybox-button.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1267681735159587258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1267681735159587258'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2012/02/fancybox-button.html' title='Вешаем Fancybox на кнопку button'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-6073506459370927267</id><published>2011-12-30T00:25:00.000-08:00</published><updated>2011-12-31T00:14:42.313-08:00</updated><title type='text'>Бесплатная CMS Open Real Estate на Yii</title><content type='html'>Недавно, мы выпустили бесплатную &lt;a href="http://monoray.ru/products"&gt;&lt;b&gt;CMS Open Real Estate на Yii&lt;/b&gt;&lt;/a&gt;. Открытый исходный код, open source. Это мой первый опыт, работы над open source проектом такого уровня.
&lt;br&gt;&lt;br&gt;
В качестве системы контроля версий использовали Mercurial hg. По моему это самое лучшее решение, до этого пробовал CVS, SVN, GIT.
&lt;br&gt;&lt;br&gt;
И самое главное набрался опыта работы с Yii framework и планирую продолжить работу с ним. Постепенно, понимаешь, насколько в нем все грамотно реализовано и сколько много труда в него вложено.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-6073506459370927267?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/6073506459370927267/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/12/cms-open-real-estate-yii.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6073506459370927267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6073506459370927267'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/12/cms-open-real-estate-yii.html' title='Бесплатная CMS Open Real Estate на Yii'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-7773503129838755705</id><published>2011-10-21T23:23:00.000-07:00</published><updated>2011-10-21T23:44:38.429-07:00</updated><title type='text'>Как в Denwer импортировать через консоль дамп базы mysql</title><content type='html'>Поражаюсь какой у блогера тупой WYSWIG приходится раставлять тег br руками для переносов, потому что если сделать перенос по умолчанию какой есть в настройках, получается УЖАС.
&lt;br&gt;&lt;br&gt;
Иногда приходится импортировать большие дампы sql, через phpmyadmin делать это проблематично, т.к. по умолчанию стоит ограничение на файлы не больше 2Мб. Сегодня надо было импортировать 90Мб, через консоль импортировалось без проблем.
&lt;br&gt;&lt;br&gt;
Win+R, cmd, Enter
&lt;br&gt;&lt;br&gt;
p:
&lt;br&gt;&lt;br&gt;
cd P:\usr\local\mysql5\bin\&lt;br&gt;
mysql_run_to_import_dumps.exe
&lt;br&gt;&lt;br&gt;
mysql&amp;gt; \r base_name
&lt;br&gt;&lt;br&gt;
mysql&amp;gt; \. dump_file
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
где p - виртуальный диск, создаваемый денвером&lt;br&gt;
base_name - имя базы&lt;br&gt;
dump_file - файл с дампом базы (включая путь)
&lt;br&gt;&lt;br&gt;
Найдено &lt;a href="http://antosha-bender.livejournal.com/43660.html"&gt;здесь&lt;/a&gt; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-7773503129838755705?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/7773503129838755705/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/10/denwer-mysql.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7773503129838755705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7773503129838755705'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/10/denwer-mysql.html' title='Как в Denwer импортировать через консоль дамп базы mysql'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-4749787696536857189</id><published>2011-10-14T00:00:00.000-07:00</published><updated>2011-10-14T00:07:22.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>Как получить выбранные элементы checkbox в массив jQuery</title><content type='html'>&lt;pre class="prettyprint lang-php"&gt;
var selectedItems = new Array();
$("input[@name='itemSelect[]']:checked").each(function() {selectedItems.push($(this).val());});
 
if (selectedItems .length == 0) {
    alert("Please select item(s) to delete.");
} else {
    $.ajax({
        type: "POST",
        url: "/ajax_do_something.php",
        data: "items=" + selectedItems.join('|'),
        dataType: "text",
        success: function (request) {
            document.location.reload();
        },
        error: function(request,error){
            alert('Error deleting item(s), try again later.');
        }
    })
} 
&lt;/pre&gt;

Нашел &lt;a href="http://blog.burcsade.com/2009/07/01/getting-selected-values-of-an-checkbox-array-with-jquery/"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-4749787696536857189?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/4749787696536857189/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/10/checkbox-jquery.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4749787696536857189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4749787696536857189'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/10/checkbox-jquery.html' title='Как получить выбранные элементы checkbox в массив jQuery'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-2291214942762240904</id><published>2011-08-03T00:36:00.000-07:00</published><updated>2011-08-03T00:41:08.533-07:00</updated><title type='text'>Паттерн Одиночка - Singleton Pattern в PHP</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: red"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color: black"&gt;
&lt;span style="color: #808080"&gt;// PHP5&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Logger {

    &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #600"&gt;$instance&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;;

    &lt;span style="color: #808080"&gt;/* Возвращаем ссылку на одиночку  */&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getInstance() {
    
        &lt;span style="color: #808080"&gt;/* Если объект еще не создан, создаем */&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::&lt;span style="color: #600"&gt;$instance&lt;/span&gt; == &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;) {
            &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::&lt;span style="color: #600"&gt;$instance&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Logger();
        }
        
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::&lt;span style="color: #600"&gt;$instance&lt;/span&gt;;
    }

    &lt;span style="color: #808080"&gt;/* Запрещаем прямое создание */&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct() {
    
    }

    &lt;span style="color: #808080"&gt;/* Запрещаем клонирование */&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __clone() {
    
    }

}&lt;/span&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-2291214942762240904?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/2291214942762240904/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/08/singleton-pattern-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/2291214942762240904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/2291214942762240904'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/08/singleton-pattern-php.html' title='Паттерн Одиночка - Singleton Pattern в PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-8188651915607383830</id><published>2011-05-31T23:50:00.000-07:00</published><updated>2011-05-31T23:52:43.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Абстрактная фабрика'/><category scheme='http://www.blogger.com/atom/ns#' term='Abstract Factory'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><category scheme='http://www.blogger.com/atom/ns#' term='Паттерны'/><title type='text'>Абстрактная фабрика - (Abstract Factory)</title><content type='html'>&lt;a href="http://andipas.blogspot.com/2011/05/php.html"&gt;Список паттернов&lt;/a&gt;
&lt;br /&gt;
&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&amp;lt;?php
&lt;span style="color: #808080"&gt;/*

Абстрактная фабрика - (Abstract Factory)

Фабрика должна возвращать объекты. Но так как она абстрактная, то изначально нужно
описать абстрактный класс фабрики, и абстрактные объекты которые она будет производить. 

Дале мы описываем реализации классов фабрик на основе абстрактной фабрики и реализации класса объектов
которые она производит. Тем самым у нас есть различные варианты фабрик и объектов с одинковыми
интерфейсами, что может быть удобно.

Далее привожу код. Есть абстрактная фабрика машин. Абстрактный класс машин. Создаем классы фабрики
&amp;quot;ford&amp;quot; и &amp;quot;vaz&amp;quot; и классы ford_machine и vaz_machine. Фабрики будут производить объект &amp;quot;машины&amp;quot;, но
свойство &amp;quot;начинака&amp;quot; этих &amp;quot;машин&amp;quot; будет отличаться, прям как в реальной жизни.

*/&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; abstract_machine_factory {
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_sedan() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; machine(&lt;span style="color: green"&gt;&amp;#039;sedan&amp;#039;&lt;/span&gt;);
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_universal() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; machine(&lt;span style="color: green"&gt;&amp;#039;universal&amp;#039;&lt;/span&gt;);    
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_hatchback() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; machine(&lt;span style="color: green"&gt;&amp;#039;hatchback&amp;#039;&lt;/span&gt;);    
    }
}

&lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; abstract_machine {
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #600"&gt;$_param&lt;/span&gt;;

    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct(&lt;span style="color: #600"&gt;$type&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;sedan&amp;#039;&lt;/span&gt;) {
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_param = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_param[&lt;span style="color: green"&gt;&amp;#039;type&amp;#039;&lt;/span&gt;] = &lt;span style="color: #600"&gt;$type&lt;/span&gt;;
    }    
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; run() {
        &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;brrrrrrrrrrrrrr ...&amp;#039;&lt;/span&gt;;
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; get_all_param() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_param;
    }
}

&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; vaz_machine &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; abstract_machine {
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct(&lt;span style="color: #600"&gt;$type&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;sedan&amp;#039;&lt;/span&gt;) {
        parent::__construct(&lt;span style="color: #600"&gt;$type&lt;/span&gt;);

        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_param[&lt;span style="color: green"&gt;&amp;#039;firm&amp;#039;&lt;/span&gt;] = &lt;span style="color: green"&gt;&amp;#039;vaz&amp;#039;&lt;/span&gt;;
    }

    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; run() {
        &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;tr tr pr tr tr pr ...&amp;#039;&lt;/span&gt;;
    }
}

&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; vaz_factory &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; abstract_machine_factory {
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_sedan() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; vaz_machine(&lt;span style="color: green"&gt;&amp;#039;vedro&amp;#039;&lt;/span&gt;);
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_universal() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; vaz_machine(&lt;span style="color: green"&gt;&amp;#039;taz&amp;#039;&lt;/span&gt;);    
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_hatchback() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; vaz_machine(&lt;span style="color: green"&gt;&amp;#039;korito&amp;#039;&lt;/span&gt;);    
    }    
}

&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ford_machine &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; abstract_machine {
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct(&lt;span style="color: #600"&gt;$type&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;sedan&amp;#039;&lt;/span&gt;) {
        parent::__construct(&lt;span style="color: #600"&gt;$type&lt;/span&gt;);
        
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_param[&lt;span style="color: green"&gt;&amp;#039;firm&amp;#039;&lt;/span&gt;] = &lt;span style="color: green"&gt;&amp;#039;ford&amp;#039;&lt;/span&gt;;
    }

    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; run() {
        &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;rrrrrrrrrrrrrrrrr ...&amp;#039;&lt;/span&gt;;
    }
}

&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ford_factory &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; abstract_machine_factory {
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_sedan() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ford_machine(&lt;span style="color: green"&gt;&amp;#039;sedan&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;ford&amp;#039;&lt;/span&gt;);
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_universal() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ford_machine(&lt;span style="color: green"&gt;&amp;#039;universal&amp;#039;&lt;/span&gt;);    
    }
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; generate_hatchback() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ford_machine(&lt;span style="color: green"&gt;&amp;#039;hatchback&amp;#039;&lt;/span&gt;);    
    }    
}

&lt;span style="color: #808080"&gt;/* Фабрика ford_factory производит машины */&lt;/span&gt;
&lt;span style="color: #600"&gt;$ford_factory&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ford_factory();
&lt;span style="color: #600"&gt;$ford_machine&lt;/span&gt; = &lt;span style="color: #600"&gt;$ford_factory&lt;/span&gt;-&amp;gt;generate_sedan();

deb(&lt;span style="color: #600"&gt;$ford_machine&lt;/span&gt;-&amp;gt;get_all_param());
deb(&lt;span style="color: #600"&gt;$ford_machine&lt;/span&gt;-&amp;gt;run());

&lt;span style="color: #808080"&gt;/* Фабрика vaz_factory производит машины, функции одинаковые но результат (объекты) разные */&lt;/span&gt;
&lt;span style="color: #600"&gt;$vaz_factory&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; vaz_factory();
&lt;span style="color: #600"&gt;$vaz_machine&lt;/span&gt; = &lt;span style="color: #600"&gt;$vaz_factory&lt;/span&gt;-&amp;gt;generate_sedan();

deb(&lt;span style="color: #600"&gt;$vaz_machine&lt;/span&gt;-&amp;gt;get_all_param());
deb(&lt;span style="color: #600"&gt;$vaz_machine&lt;/span&gt;-&amp;gt;run());

&lt;span style="color: #808080"&gt;/* В результате мы видим на экране:

Array
(
    [type] =&amp;gt; sedan
    [firm] =&amp;gt; ford
)

rrrrrrrrrrrrrrrrr ...

Array
(
    [type] =&amp;gt; vedro
    [firm] =&amp;gt; vaz
)

tr tr pr tr tr pr ...

*/&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; deb(&lt;span style="color: #600"&gt;$mVar&lt;/span&gt;) {
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;quot;&amp;lt;PRE&amp;gt;&amp;quot;&lt;/span&gt;);
    print_r(&lt;span style="color: #600"&gt;$mVar&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;quot;&amp;lt;/PRE&amp;gt;&amp;quot;&lt;/span&gt;);
}

&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;a href="http://andipas.blogspot.com/2011/05/php.html"&gt;Список паттернов&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-8188651915607383830?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/8188651915607383830/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/05/abstract-factory.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/8188651915607383830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/8188651915607383830'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/05/abstract-factory.html' title='Абстрактная фабрика - (Abstract Factory)'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-4799989228964388880</id><published>2011-05-31T23:44:00.000-07:00</published><updated>2011-08-03T00:42:11.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><category scheme='http://www.blogger.com/atom/ns#' term='Паттерны'/><title type='text'>Паттерны проектирования с примерами PHP</title><content type='html'>Чтобы получше разобраться  с паттернами на PHP, решил их глубже изучить и написать простые примеры их реализации на PHP. Ниже список основных паттернов, буду по мере возможности добавлять ссылки на примеры с реализацией.&lt;br&gt;&lt;br&gt;&lt;br&gt;

&lt;h2&gt;Порождающие паттерны.&lt;/h2&gt;&lt;br&gt;
  Эта одна из категорий на которые  разбивают шаблоны проектирования. В свою очередь эту категорию делят еще  на два типа — паттерны порождающие объекты и паттерны порождающие  классы. Первые создаются с помощью другого объекта, вторые с помощью  наследования изменяют класс создаваемого объекта.&lt;br&gt;
Основная идея  порождающих паттернов заключается в том, что инстанцирование объектов  происходит «за кадром», они скрывают в себе какие именно классы  используются в приложении и детали их реализации, оставляя только  интерфейсы к ним. По-идее это позволяет собрать полностью рабочее  приложение из различных заготовленных заранее объектов, но по своему  опыту скажу, что это практически невозможно без использования других  типов шаблонов.&lt;br&gt;
&lt;br&gt;
  Их всего 5:&lt;br&gt;
  1. &lt;a href="http://andipas.blogspot.com/2011/05/abstract-factory.html"&gt;Абстрактная фабрика (Abstract Factory)&lt;/a&gt;&lt;br&gt;
  2. &lt;a href="http://andipas.blogspot.com/2011/08/singleton-pattern-php.html"&gt;Одиночка&lt;/a&gt; (Singleton)&lt;br&gt;
  3. Прототип (Prototype)&lt;br&gt;
  4. Строитель (Builder)&lt;br&gt;
  5. Фабричный метод (Factory Method)&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;h2&gt;    Структурные паттерны.&lt;/h2&gt;&lt;br&gt;
   Здесь также есть два типа — паттерны уровня класса и паттерны уровня  объекта. Самым ярким примером первых, на мой взгляд является «Адаптер».  Общий смысл его в том, что если вдруг у нас есть класс и его интерфейсы  не совместимы с другими библиотеками в нашей системе, то что бы  разрешить этот конфликт, мы не изменяем код этого класса, а пишем для  него адаптер. Очень часто этот паттерн применяется при написании  библиотек, которые позволяют работать с различными СУБД. Паттерны уровня  объекта позволяют достичь большей гибкости в приложения во время его  выполнения. Наиболее популярный из них - «Декоратор».&lt;br&gt;
&lt;br&gt;
  Всего 7:&lt;br&gt;
  1. Адаптер (Adapter)&lt;br&gt;
  2. Декоратор (Decorator)&lt;br&gt;
  3. Заместитель (Proxy)&lt;br&gt;
  4. Компоновщик (Composite)&lt;br&gt;
  5. Мост (Bridge)&lt;br&gt;
  6. Приспособленец  (Flyweight)&lt;br&gt;
  7. Фасад (Facade)&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;h2&gt;    Паттерны поведения.&lt;/h2&gt;&lt;br&gt;
   Основная идея паттернов этого типа — взаимодействие объектов и классов  между собой. Но они также делятся на два уровня — паттерны поведения  уровня класса и паттерны поведения уровня объекта. Здесь самое сложное  это добиться наименьшей степени связанности компонентов системы друг с  другом, потому что почти все объекты должны знать о существовании других  и нести в себе эту информацию. Отсюда и появились такие сложные  паттерны как «Посредник» и «Цепочка обязанностей».&lt;br&gt;
&lt;br&gt;
  Их 11:&lt;br&gt;
  1. Интерпретатор (Interpreter)&lt;br&gt;
  2. Итератор (Iterator)&lt;br&gt;
  3. Команда (Command)&lt;br&gt;
  4. Наблюдатель (Observer)&lt;br&gt;
  5. Посетитель (Visitor)&lt;br&gt;
  6. Посредник (Mediator)&lt;br&gt;
  7. Состояние (State)&lt;br&gt;
  8. Стратегия (Strategy)&lt;br&gt;
  9. Хранитель (Memento)&lt;br&gt;
  10. Цепочка обязанностей (Chain of Responsibility)&lt;br&gt;
  11. Шаблонный метод (Template Method)&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="http://programmerz.ru/post/patter_types.html"&gt;скопипастил&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-4799989228964388880?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/4799989228964388880/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/05/php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4799989228964388880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4799989228964388880'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/05/php.html' title='Паттерны проектирования с примерами PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-7678329848454127009</id><published>2011-04-21T02:46:00.000-07:00</published><updated>2011-04-21T02:47:16.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>go.js - классы для JavaScript и другое</title><content type='html'>&lt;div style="PADDING-BOTTOM: 4px"&gt;&lt;b&gt;go.js - классы для JavaScript и  другое&lt;/b&gt;&lt;/div&gt; &lt;div class="ExternalClass0BD7469EAB454D50971EB39C6189F378"&gt; &lt;div&gt;- Эмуляция "классов"
- Наследовение
- Связывание методов с контекстом  объекта
- Доступ к цепи предков и предыдущим реализациям методов
-  Статические методы, абстрактные классы, разрушение объектов
- Печеньки
-  Стопрацентнае, на, покрытие юнит-тестами

&lt;a class="bb" href="http://code.google.com/p/go-js/downloads/list"&gt;Брать здесь&lt;/a&gt; или &lt;a class="bb" href="http://code.google.com/p/go-js/source/checkout"&gt;клонировать  тут&lt;/a&gt;

&lt;h3&gt;go.js - зачем оно нужно и как работает&lt;/h3&gt; &lt;p&gt;go.js, это &lt;tt&gt;JavaScript&lt;/tt&gt;-библиотека. &lt;/p&gt; &lt;p&gt;Все популярные &lt;tt&gt;JavaScript&lt;/tt&gt;-библиотеки акцентируют внимание на  взаимодействии с &lt;tt&gt;DOM&lt;/tt&gt;, визуальных эффектах и достижении  кроссбраузерности. В этих областях они достигли больших высот и пытаться  воспроизводить данный функционал самостоятельно, достаточно бессмысленно. Лучше  взять тот же &lt;tt&gt;jQuery&lt;/tt&gt;. &lt;/p&gt; &lt;p&gt;go.js концентрируется на упрощении внутренних вещей языка, например, ООП.  Подразумевается использование go.js вместе с какой-либо другой библиотекой. &lt;/p&gt; &lt;p&gt;Почему не взять надстройку над ООП из тех же &lt;tt&gt;MooTools&lt;/tt&gt; или  &lt;tt&gt;Prototype&lt;/tt&gt;? &lt;/p&gt; &lt;ol&gt;&lt;li&gt;Потому что брюзге-автору не нравятся многие моменты реализации этих  надстроек.  &lt;/li&gt;&lt;li&gt;Например, в &lt;tt&gt;jQuery&lt;/tt&gt; нет вообще ничего для ООП, а переходить на  другую библиотеку только из-за ООП глупо. Подключать же вслед за &lt;tt&gt;jQuery&lt;/tt&gt;  ещё и &lt;tt&gt;Prototype&lt;/tt&gt; с его объёмами и конфликтами, тоже не рационально. &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-7678329848454127009?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/7678329848454127009/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/04/gojs-javascript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7678329848454127009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7678329848454127009'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/04/gojs-javascript.html' title='go.js - классы для JavaScript и другое'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5987198005046731594</id><published>2011-04-21T02:12:00.000-07:00</published><updated>2011-04-21T02:33:21.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='IP'/><title type='text'>Определение IP пользователя PHP</title><content type='html'>&lt;pre class="brush: php"&gt;
function ip() {
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5987198005046731594?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5987198005046731594/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/04/ip-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5987198005046731594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5987198005046731594'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/04/ip-php.html' title='Определение IP пользователя PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-4246923634167263129</id><published>2011-02-05T00:04:00.000-08:00</published><updated>2011-08-04T00:04:45.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Валидация'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>Клиентская и серверная валидация</title><content type='html'>Одна из наиболее частых задач в web-разработке - создание форм и проверка их на корректность вводимых данных. Для того чтобы это все было более юзабильно, есть специальный &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" class="external text" title="http://bassistance.de/jquery-plugins/jquery-plugin-validation/"&gt;&lt;b&gt;jQuery Validation Plugin&lt;/b&gt;&lt;/a&gt;. Этот плагин позволяет на стороне клиента, проверять форму на корректность вводимых данных, соответственно не требуется перезагрузка страницы.&lt;br&gt;
&lt;br&gt;
Чтобы облегчить создание форм в web-приложениях, существуют различные библиотеки. Одна из них &lt;b&gt;&lt;a href="http://pear.php.net/package/HTML_QuickForm2"&gt;HTML_QuickForm2&lt;/a&gt;&lt;/b&gt; и ее доработка &lt;b&gt;&lt;a href="http://jquickform.ru/"&gt;jQuickForm&lt;/a&gt;&lt;/b&gt; которая должна была подружить, этот построитель форм с &lt;b&gt;jQuery Validation Plugin&lt;/b&gt;. Вышло на мой взгляд не плохо, но слишком наворочено. К тому же автор давно не развивал это дополнение, последний раз когда я скачивал этот пакет, &lt;a href="http://code.google.com/p/jquickform/issues/list"&gt;не работала клиентская валидация&lt;/a&gt;, а ведь изначально именно для этого и был разработанн этот пакет.&lt;br&gt;
&lt;br&gt;
Я знаю что в разных фреймворках, есть свои библиотеки для облегчения работы с формами. Как правило без клиентской валидации. Я тоже написал свой класс для построения форм, но он требует доработки.&lt;br&gt;
&lt;br&gt;
У всех этих "помошников" построителей форм, есть минусы -
1. Необходимо разбиратся с интерфейсами классов, как правило, сделано удобно, разобраться можно быстро
2. Сложности кастомизации, изменения дизайна форм
3. Все эти надстройки жрут ресурсы&lt;br&gt;
&lt;br&gt;
После размышлений над этим, я создал небольшой класс, который занимается только &lt;span style="font-weight: bold;"&gt;валидацией&lt;/span&gt;, правила задаются аналогично &lt;b&gt;jQuery Validation Plugin. &lt;/b&gt;Объект этого класса создает необходимый код JS для валидации на стороне клиента (если нужно) и также проверяет формы на стороне сервера по тем же правилам. Привожу пример -&lt;br&gt;
&lt;br&gt;
&lt;table class="source-code" style="border: 1px solid rgb(127, 157, 185); font-size: 12px; background-color: rgb(255, 255, 245);"&gt;
&lt;colgroup&gt;&lt;/colgroup&gt;
   &lt;col width="10"&gt;

&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" style="background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px;"&gt;Код -&lt;span style="color: rgb(0, 85, 0);"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
   &lt;td style="text-align: left; vertical-align: top; color: rgb(73, 88, 132); padding: 4px 3px; background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
&lt;/pre&gt;&lt;/td&gt;
   &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: rgb(34, 34, 34);"&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt;
header(&lt;span style="color:green;"&gt;"Content-Type: text/html; charset=utf-8"&lt;/span&gt;);
&lt;span style="color: rgb(0, 0, 255);"&gt;require&lt;/span&gt; &lt;span style="color:green;"&gt;'valid/Valid.php'&lt;/span&gt;;
&lt;span style="color: rgb(0, 0, 255);"&gt;require&lt;/span&gt; &lt;span style="color:green;"&gt;'valid/ValidLang.php'&lt;/span&gt;;

&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Valid(&lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'login'&lt;/span&gt;, &lt;span style="color:green;"&gt;'required'&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'login'&lt;/span&gt;, &lt;span style="color:green;"&gt;'minlength'&lt;/span&gt;, &lt;span style="color:red;"&gt;5&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'pass'&lt;/span&gt;, &lt;span style="color:green;"&gt;'required'&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'pass'&lt;/span&gt;, &lt;span style="color:green;"&gt;'minlength'&lt;/span&gt;, &lt;span style="color:red;"&gt;5&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'re_pass'&lt;/span&gt;, &lt;span style="color:green;"&gt;'equalTo'&lt;/span&gt;, &lt;span style="color:green;"&gt;'pass'&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'email'&lt;/span&gt;, &lt;span style="color:green;"&gt;'required'&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;addRule(&lt;span style="color:green;"&gt;'email'&lt;/span&gt;, &lt;span style="color:green;"&gt;'email'&lt;/span&gt;);

&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 255);"&gt;isset&lt;/span&gt;(&lt;span style="color: rgb(102, 0, 0);"&gt;$_POST&lt;/span&gt;[&lt;span style="color:green;"&gt;'login'&lt;/span&gt;])) {
   &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;check()) {
       &lt;span style="color: rgb(128, 128, 128);"&gt;// Здесь можно проверить дополнительно, на повторный логин и мыло например&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color:green;"&gt;'Валидация успешна'&lt;/span&gt;;
       &lt;span style="color: rgb(128, 128, 128);"&gt;// Сохраняем данные, редиректим если надо&lt;/span&gt;
   }
}
&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&amp;gt;
&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(136, 85, 0);"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Valid - mini validator&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(85, 0, 85);"&gt;&amp;lt;meta http-equiv=&lt;span style="color:green;"&gt;"Content-Type"&lt;/span&gt; content=&lt;span style="color:green;"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&amp;gt;&lt;/span&gt;
     
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;link rel=&lt;span style="color:green;"&gt;"STYLESHEET"&lt;/span&gt; type=&lt;span style="color:green;"&gt;"text/css"&lt;/span&gt; href=&lt;span style="color:green;"&gt;"css/eform.css"&lt;/span&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;script type=&lt;span style="color:green;"&gt;"text/javascript"&lt;/span&gt; src=&lt;span style="color:green;"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;script type=&lt;span style="color:green;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;/span&gt;
               !window.jQuery &amp;amp;&amp;amp; document.write(&lt;span style="color:green;"&gt;'&amp;lt;script src="js/jquery-1.4.3.min.js"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/span&gt;);
       &lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;script type=&lt;span style="color:green;"&gt;"text/javascript"&lt;/span&gt; src=&lt;span style="color:green;"&gt;"js/jquery.validate.pack.js"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;script type=&lt;span style="color:green;"&gt;"text/javascript"&lt;/span&gt; src=&lt;span style="color:green;"&gt;"js/jquery.form.js"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 178, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(136, 85, 0);"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
 
&lt;span style="color: rgb(119, 0, 0);"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;form action=&lt;span style="color:green;"&gt;"index.php"&lt;/span&gt; method=&lt;span style="color:green;"&gt;"post"&lt;/span&gt; name=&lt;span style="color:green;"&gt;"reg_form"&lt;/span&gt; id=&lt;span style="color:green;"&gt;"reg_form"&lt;/span&gt; class=&lt;span style="color:green;"&gt;"eForm"&lt;/span&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;fieldset&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;legend&amp;gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'registration'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/legend&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;label for=&lt;span style="color:green;"&gt;"login"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'login'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type=&lt;span style="color:green;"&gt;"text"&lt;/span&gt; id=&lt;span style="color:green;"&gt;"login"&lt;/span&gt; name=&lt;span style="color:green;"&gt;"login"&lt;/span&gt; value=&lt;span style="color:green;"&gt;"&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getReq(&lt;span style="color:green;"&gt;'login'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;"&lt;/span&gt; /&amp;gt;&lt;/span&gt;
           &lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getErr(&lt;span style="color:green;"&gt;'login'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;label for=&lt;span style="color:green;"&gt;"pass"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'pass'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type=&lt;span style="color:green;"&gt;"password"&lt;/span&gt; id=&lt;span style="color:green;"&gt;"pass"&lt;/span&gt; name=&lt;span style="color:green;"&gt;"pass"&lt;/span&gt; value=&lt;span style="color:green;"&gt;""&lt;/span&gt; /&amp;gt;&lt;/span&gt;
           &lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getErr(&lt;span style="color:green;"&gt;'pass'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;label for=&lt;span style="color:green;"&gt;"re_pass"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'re_pass'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type=&lt;span style="color:green;"&gt;"password"&lt;/span&gt; id=&lt;span style="color:green;"&gt;"re_pass"&lt;/span&gt; name=&lt;span style="color:green;"&gt;"re_pass"&lt;/span&gt; value=&lt;span style="color:green;"&gt;""&lt;/span&gt; /&amp;gt;&lt;/span&gt;
           &lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getErr(&lt;span style="color:green;"&gt;'re_pass'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;label for=&lt;span style="color:green;"&gt;"email"&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'email'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type=&lt;span style="color:green;"&gt;"text"&lt;/span&gt; id=&lt;span style="color:green;"&gt;"email"&lt;/span&gt; name=&lt;span style="color:green;"&gt;"email"&lt;/span&gt; value=&lt;span style="color:green;"&gt;"&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getReq(&lt;span style="color:green;"&gt;'email'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;"&lt;/span&gt; /&amp;gt;&lt;/span&gt;
           &lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getErr(&lt;span style="color:green;"&gt;'email'&lt;/span&gt;);&lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;input type=&lt;span style="color:green;"&gt;"submit"&lt;/span&gt; value=&lt;span style="color:green;"&gt;"&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$l&lt;/span&gt;[&lt;span style="color:green;"&gt;'index'&lt;/span&gt;][&lt;span style="color:green;"&gt;'registration'&lt;/span&gt;]; &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;"&lt;/span&gt; class=&lt;span style="color:green;"&gt;"noresize submit"&lt;/span&gt;/&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/fieldset&amp;gt;&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

&lt;span style="color:red;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$oValid&lt;/span&gt;-&amp;gt;getJS(&lt;span style="color:green;"&gt;'reg_form'&lt;/span&gt;); &lt;/span&gt;&lt;span style="color:red;"&gt;?&amp;gt;&lt;/span&gt;

&lt;span style="color: rgb(119, 0, 0);"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

Пример реализации можно посмотреть в моем mini MVC framework, там уже реализована регистрация, авторизация - &lt;a href="http://code.google.com/p/mfram/source/browse/"&gt;mFram&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-4246923634167263129?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/4246923634167263129/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4246923634167263129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4246923634167263129'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/02/blog-post.html' title='Клиентская и серверная валидация'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1256282173025585742</id><published>2011-02-02T03:02:00.000-08:00</published><updated>2011-02-02T03:05:13.539-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>Скролл к элементу DOM HTML</title><content type='html'>&lt;div class="text"&gt;  &lt;p&gt;Переход к элементу с определённым &lt;code&gt;id&lt;/code&gt; достигается очень просто: даётся ссылка с &lt;code&gt;href="#id-элемента"&lt;/code&gt;. Однако, иногда &lt;code&gt;id&lt;/code&gt; у элемента нет. Используя jQuery перейти к определённому элементу можно так:&lt;/p&gt;  &lt;div class="hl-code"&gt;&lt;div class="javascript-hl-main"&gt;&lt;pre&gt;&lt;span class="javascript-hl-code"&gt;$&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="javascript-hl-string"&gt;html,body&lt;/span&gt;&lt;span class="javascript-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;scrollTop&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;$&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;myElement&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;offset&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;top&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;      &lt;div class="hl-code"&gt;&lt;div class="javascript-hl-main"&gt;&lt;pre&gt;&lt;span class="javascript-hl-code"&gt;$&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="javascript-hl-string"&gt;html,body&lt;/span&gt;&lt;span class="javascript-hl-quotes"&gt;"&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;animate&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;{&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;scrollTop&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;: $&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;myElement&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;offset&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;(&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;.&lt;/span&gt;&lt;span class="javascript-hl-identifier"&gt;top&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;}&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;, &lt;/span&gt;&lt;span class="javascript-hl-number"&gt;1000&lt;/span&gt;&lt;span class="javascript-hl-brackets"&gt;)&lt;/span&gt;&lt;span class="javascript-hl-code"&gt;;

&lt;a href="http://rmcreative.ru/blog/post/perekhodim-k-opredeljonnomu-dom-elementu#scroll-to-footer"&gt;Прочел у Sam-a&lt;/a&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1256282173025585742?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1256282173025585742/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/02/dom-html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1256282173025585742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1256282173025585742'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/02/dom-html.html' title='Скролл к элементу DOM HTML'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-804154968679040135</id><published>2011-02-01T21:52:00.000-08:00</published><updated>2011-02-01T21:57:30.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='дебаг'/><category scheme='http://www.blogger.com/atom/ns#' term='денвер'/><title type='text'>Логирование ошибок в файл Denwer</title><content type='html'>Как оказалось &lt;a href="http://www.denwer.ru/"&gt;Denwer&lt;/a&gt; не логирует php ошибки в файл, а штука очень даже нужная особенно на фоне борьбы с ошибками. Чтобы он начал логировать, нужно вставить вот такой фрагмент кода в файл .htaccess :

&lt;blockquote&gt;php_value error_reporting E_ALL&lt;br&gt;
php_value display_errors Off&lt;br&gt;
php_value display_startup_errors Off&lt;br&gt;
php_value log_errors On&lt;br&gt;
php_value log_errors_max_len 1024&lt;br&gt;
php_value ignore_repeated_errors Off&lt;br&gt;
php_value ignore_repeated_source Off&lt;br&gt;
php_value report_memleaks On&lt;br&gt;
php_value track_errors Off&lt;br&gt;
php_value html_errors Off&lt;br&gt;
php_value error_log "error.log"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-804154968679040135?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/804154968679040135/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/02/denwer.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/804154968679040135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/804154968679040135'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/02/denwer.html' title='Логирование ошибок в файл Denwer'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-4592325571525373251</id><published>2011-01-25T23:22:00.000-08:00</published><updated>2011-01-25T23:25:02.553-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='фоны'/><category scheme='http://www.blogger.com/atom/ns#' term='текстуры'/><category scheme='http://www.blogger.com/atom/ns#' term='дизайн'/><title type='text'>Фоны для вебдизайна</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dinpattern.com/category/patterns/"&gt;dinpattern.com&lt;/a&gt;
Довольно много сложных и симпатичных «обойных» фонов на любой вкус.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.3quarks.com/en/BackgroundPattern/"&gt;3quarks.com/en/BackgroundPattern/&lt;/a&gt;
Спокойные светлые фоны. Каждый из них можно сразу проверить в деле, в один клик выбранным кусочком выстилается фон страницы.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.squidfingers.com/patterns/"&gt;squidfingers.com/patterns/&lt;/a&gt;
Более 150 различных фонов, встречаются очень интересные. Вот только неудобно, что выводится всего шесть образцов на страницу.&lt;/li&gt;&lt;li&gt;&lt;a href="http://shizoo-design.de/patterns.php"&gt;shizoo-design.de/patterns.php&lt;/a&gt;
У немецкого шизофреника тоже нашёл чем поживиться.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tartanmaker.com/"&gt;tartanmaker.com&lt;/a&gt;
Особенный сайт, это целый генератор фонов, да не обычных. Эти фоны  имитируют шотландские орнаменты на тартане — ткани, из которой шьют  настоящие мужские юбки (килты). Я в каком-то журнале читал про тартан,  очень интересно было. Прямо целая наука! У каждого клана или даже  организации своя особая расцветка.&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://patterns.ava7.com/" rel="nofollow"&gt;patterns.ava7.com/&lt;/a&gt;
&lt;a href="http://www.bgpatterns.com/" rel="nofollow"&gt;www.bgpatterns.com/&lt;/a&gt;
&lt;a href="http://www.backgroundlabs.com/" rel="nofollow"&gt;www.backgroundlabs.c…&lt;/a&gt;
&lt;a href="http://everydayicons.jp/patterns.html" rel="nofollow"&gt;everydayicons.jp/pat…&lt;/a&gt;
&lt;a href="http://pattern8.com/" rel="nofollow"&gt;pattern8.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazingtextures.com/textures/" rel="nofollow"&gt;amazingtextures.com – много текстур в высоком разрешении&lt;/a&gt;   &lt;p&gt;&lt;a href="http://www.absolutecross.com/downloads/textures/abstract" rel="nofollow"&gt;www.absolutecross.com&lt;/a&gt;  – еще 500 штук безшовных текстур&lt;/p&gt;   &lt;p&gt;&lt;a href="http://www.cgtextures.com/" rel="nofollow"&gt;www.cgtextures.com/&lt;/a&gt; – вообще самый лучший сайт с такими штуками&lt;/p&gt;   &lt;p&gt;&lt;a href="http://www.repeatxy.com/colors.php" rel="nofollow"&gt;www.repeatxy.com/col…&lt;/a&gt; – сайт с удобным поиском (по цвету, например)&lt;/p&gt;   &lt;p&gt;&lt;a href="http://www.squidfingers.com/patterns/" rel="nofollow"&gt;www.squidfingers.com…&lt;/a&gt; – 160 штук весьма геометрических паттернов&lt;/p&gt;   &lt;p&gt;ну и еще несколько ссылок скопом:
&lt;a href="http://www.texturewarehouse.com/gallery/index.php" rel="nofollow"&gt;www.texturewarehouse…&lt;/a&gt;
&lt;a href="http://www.thelimelite.net/html/textures1.shtml" rel="nofollow"&gt;www.thelimelite.net/…&lt;/a&gt;
&lt;a href="http://www.textureking.com/" rel="nofollow"&gt;www.textureking.com/&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://brokenbrake.biz/2011/01/19/background-patterns#comment"&gt;Скопипастил у Тормоза&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-4592325571525373251?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/4592325571525373251/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post_1471.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4592325571525373251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4592325571525373251'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post_1471.html' title='Фоны для вебдизайна'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-8496369693033832440</id><published>2011-01-25T23:19:00.000-08:00</published><updated>2011-01-25T23:29:30.810-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Парсинг'/><title type='text'>Парсим курс валют</title><content type='html'>&lt;table class="source-code" style="border: 1px solid rgb(127, 157, 185); font-size: 12px; background-color: rgb(255, 255, 245);"&gt;
&lt;colgroup&gt;&lt;/colgroup&gt;
  &lt;col width="10"&gt;

&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" style="background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px;"&gt;Код -&lt;span style="color: rgb(0, 85, 0);"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
  &lt;td style="text-align: left; vertical-align: top; color: rgb(73, 88, 132); padding: 4px 3px; background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1
2
3
4
5
6
7
&lt;/pre&gt;&lt;/td&gt;
  &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: rgb(34, 34, 34);"&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;$url&lt;/span&gt; = &lt;span style="color:green;"&gt;'http://www.cbr.ru/scripts/XML_daily.asp?date_req='&lt;/span&gt;.date(&lt;span style="color:green;"&gt;"d/m/Y"&lt;/span&gt;);
&lt;span style="color: rgb(102, 0, 0);"&gt;$buf&lt;/span&gt; = file_get_contents(&lt;span style="color: rgb(102, 0, 0);"&gt;$url&lt;/span&gt;);
&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;(&lt;span style="color: rgb(102, 0, 0);"&gt;$buf&lt;/span&gt;) {
 &lt;span style="color: rgb(102, 0, 0);"&gt;$xmldoc&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; SimpleXMLElement(&lt;span style="color: rgb(102, 0, 0);"&gt;$buf&lt;/span&gt;);
 &lt;span style="color: rgb(102, 0, 0);"&gt;$result&lt;/span&gt; = &lt;span style="color: rgb(102, 0, 0);"&gt;$xmldoc&lt;/span&gt;-&amp;gt;Xpath(&lt;span style="color:green;"&gt;"//Valute[@ID='R01239']"&lt;/span&gt;); &lt;span style="color: rgb(128, 128, 128);"&gt;//R01239 код евро&lt;/span&gt;
 &lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt; &lt;span style="color: rgb(102, 0, 0);"&gt;$result&lt;/span&gt;[&lt;span style="color:red;"&gt;0&lt;/span&gt;]-&amp;gt;Value;
}&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;a href="http://blog.gtalex.ru/php-skript-kurs-valyut#comments"&gt;Скопипастил&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-8496369693033832440?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/8496369693033832440/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post_25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/8496369693033832440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/8496369693033832440'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post_25.html' title='Парсим курс валют'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5411020412858488453</id><published>2011-01-13T00:38:00.000-08:00</published><updated>2011-01-13T00:44:14.368-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Как называются радиобатоны по-русски?</title><content type='html'>Не задумывался над этим, спросили, откопал вот такие варианты -

"Радио",
"Переключатель",
"Переключатель многопозиционый" ))

но все таки правильный - &lt;a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0"&gt;&lt;span style="font-weight: bold;"&gt;"Радиокнопка"&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5411020412858488453?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5411020412858488453/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5411020412858488453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5411020412858488453'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2011/01/blog-post.html' title='Как называются радиобатоны по-русски?'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-3198673359905491206</id><published>2010-12-27T03:31:00.000-08:00</published><updated>2010-12-27T03:35:19.532-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Парсинг'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Парсер простого HTML</title><content type='html'>Убирает не закрыте, не нужные теги и атрибуты. Выводит отчет.

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&amp;lt;?php
 
error_reporting(-&lt;span style="color: red"&gt;1&lt;/span&gt;);
 
&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyHtmlTidy
{
    &lt;span style="color: #0000ff"&gt;const&lt;/span&gt;
        TAG  = &lt;span style="color: green"&gt;&amp;#039;&amp;lt;(?:&amp;quot;[^&amp;quot;]*&amp;quot;|\&amp;#039;[^\&amp;#039;]*\&amp;#039;|[^\&amp;#039;&amp;quot;&amp;gt;])*&amp;gt;&amp;#039;&lt;/span&gt;,
        ATTR = &lt;span style="color: green"&gt;&amp;#039;\w++\s*=\s*&amp;quot;[^&amp;quot;]++&amp;quot;|\w++\s*=\s*\&amp;#039;[^\&amp;#039;]++\&amp;#039;|\w++\s*=\s*[^\s]++&amp;#039;&lt;/span&gt;;
 
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt;
        &lt;span style="color: #600"&gt;$_goodTags&lt;/span&gt;  = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;#039;b&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;i&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;u&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;s&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;p&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;a&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;img&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;br&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;hr&amp;#039;&lt;/span&gt;),
        &lt;span style="color: #600"&gt;$_selfClose&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;#039;img&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;br&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;hr&amp;#039;&lt;/span&gt;),
        &lt;span style="color: #600"&gt;$_goodAttrs&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(
                      &lt;span style="color: green"&gt;&amp;#039;a&amp;#039;&lt;/span&gt;   =&amp;gt; &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;#039;href&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;title&amp;#039;&lt;/span&gt;),
                      &lt;span style="color: green"&gt;&amp;#039;img&amp;#039;&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;#039;src&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;alt&amp;#039;&lt;/span&gt;)),
        &lt;span style="color: #600"&gt;$_nest&lt;/span&gt;      = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
 
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt;
        &lt;span style="color: #600"&gt;$errors&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
 
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; preparse(&lt;span style="color: #600"&gt;$html&lt;/span&gt;)
    {
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$text&lt;/span&gt; = preg_replace_callback(&lt;span style="color: green"&gt;&amp;#039;/(&amp;#039;&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::TAG.&lt;span style="color: green"&gt;&amp;#039;)/Uus&amp;#039;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: #600"&gt;$this&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;_replace&amp;#039;&lt;/span&gt;), &lt;span style="color: #600"&gt;$html&lt;/span&gt;);
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff"&gt;empty&lt;/span&gt;(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest)) {
            &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors[] = &lt;span style="color: green"&gt;&amp;#039;Unclosed tags &amp;#039;&lt;/span&gt; . implode(&lt;span style="color: green"&gt;&amp;#039;, &amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest);
            &lt;span style="color: #600"&gt;$text&lt;/span&gt; .= &lt;span style="color: green"&gt;&amp;#039;&amp;lt;/&amp;#039;&lt;/span&gt; . implode(&lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;lt;/&amp;#039;&lt;/span&gt;, array_reverse(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest)) . &lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;#039;&lt;/span&gt;;
        }
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$text&lt;/span&gt;;
    }
 
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; _replace(&lt;span style="color: #600"&gt;$matches&lt;/span&gt;)
    {
        &lt;span style="color: #600"&gt;$tag&lt;/span&gt; = &lt;span style="color: #600"&gt;$matches&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;];
 
        preg_match(&lt;span style="color: green"&gt;&amp;#039;/^&amp;lt;\/?(\w++)/&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$tag&lt;/span&gt;, &lt;span style="color: #600"&gt;$m&lt;/span&gt;);
        &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; = strtolower(&lt;span style="color: #600"&gt;$m&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;]);
        &lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt; = &lt;span style="color: #600"&gt;$tag&lt;/span&gt;{strlen(&lt;span style="color: #600"&gt;$tag&lt;/span&gt;) - &lt;span style="color: red"&gt;2&lt;/span&gt;} == &lt;span style="color: green"&gt;&amp;#039;/&amp;#039;&lt;/span&gt;;
        &lt;span style="color: #600"&gt;$attrs&lt;/span&gt; = trim(substr(&lt;span style="color: #600"&gt;$tag&lt;/span&gt;, strlen(&lt;span style="color: #600"&gt;$m&lt;/span&gt;[&lt;span style="color: red"&gt;0&lt;/span&gt;]), (&lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt; ? -&lt;span style="color: red"&gt;2&lt;/span&gt; : -&lt;span style="color: red"&gt;1&lt;/span&gt;)));
 
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!in_array(&lt;span style="color: #600"&gt;$tagName&lt;/span&gt;, &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_goodTags)) {
            &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors[] = &lt;span style="color: green"&gt;&amp;#039;Tag &amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039; is deprecated&amp;#039;&lt;/span&gt;;
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
        }
 
        &lt;span style="color: #808080"&gt;// Closing tag&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$tag&lt;/span&gt;{&lt;span style="color: red"&gt;1&lt;/span&gt;} == &lt;span style="color: green"&gt;&amp;#039;/&amp;#039;&lt;/span&gt;) {
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;empty&lt;/span&gt;(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest) || end(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest) != &lt;span style="color: #600"&gt;$tagName&lt;/span&gt;) {
                &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors[] = &lt;span style="color: green"&gt;&amp;#039;Odd close tag &amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt;;
                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;lt;&amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;lt;/&amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;#039;&lt;/span&gt;;
            }
            array_pop(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest);
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;lt;/&amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;#039;&lt;/span&gt;;
        }
 
        &lt;span style="color: #808080"&gt;// Open tag or self-closing tag&lt;/span&gt;
        &lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt; = &lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt; || in_array(&lt;span style="color: #600"&gt;$tagName&lt;/span&gt;, &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_selfClose);
 
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt;) {
            &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_nest[] = &lt;span style="color: #600"&gt;$tagName&lt;/span&gt;;
        }                       
 
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_goodAttrs[&lt;span style="color: #600"&gt;$tagName&lt;/span&gt;])) {
            &lt;span style="color: #808080"&gt;// No attributes at all&lt;/span&gt;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$attrs&lt;/span&gt;)) {
                &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors[] = &lt;span style="color: green"&gt;&amp;#039;Tag &amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039; cannot have attributes&amp;#039;&lt;/span&gt;;
            }
            &lt;span style="color: #600"&gt;$attrs&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
            &lt;span style="color: #808080"&gt;// Check every attribute&lt;/span&gt;
            preg_match_all(&lt;span style="color: green"&gt;&amp;#039;/&amp;#039;&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::ATTR.&lt;span style="color: green"&gt;&amp;#039;/Uus&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$attrs&lt;/span&gt;, &lt;span style="color: #600"&gt;$m&lt;/span&gt;);
            &lt;span style="color: #600"&gt;$attrs&lt;/span&gt; = &lt;span style="color: #600"&gt;$m&lt;/span&gt;[&lt;span style="color: red"&gt;0&lt;/span&gt;];
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$attrs&lt;/span&gt; &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$i&lt;/span&gt; =&amp;gt; &lt;span style="color: #600"&gt;$attr&lt;/span&gt;) {
                &lt;span style="color: #600"&gt;$p&lt;/span&gt; = strpos(&lt;span style="color: #600"&gt;$attr&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;=&amp;#039;&lt;/span&gt;);
                &lt;span style="color: #600"&gt;$attrName&lt;/span&gt; = strtolower(trim(substr(&lt;span style="color: #600"&gt;$attr&lt;/span&gt;, &lt;span style="color: red"&gt;0&lt;/span&gt;, &lt;span style="color: #600"&gt;$p&lt;/span&gt;)));
                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!in_array(&lt;span style="color: #600"&gt;$attrName&lt;/span&gt;, &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_goodAttrs[&lt;span style="color: #600"&gt;$tagName&lt;/span&gt;])) {
                    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;errors[] = &lt;span style="color: green"&gt;&amp;#039;Wrong &amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039; attribute &amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$attrName&lt;/span&gt;;
                    &lt;span style="color: #0000ff"&gt;unset&lt;/span&gt;(&lt;span style="color: #600"&gt;$attrs&lt;/span&gt;[&lt;span style="color: #600"&gt;$i&lt;/span&gt;]);
                } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
                    &lt;span style="color: #600"&gt;$attrs&lt;/span&gt;[&lt;span style="color: #600"&gt;$i&lt;/span&gt;] = &lt;span style="color: #600"&gt;$attrName&lt;/span&gt; . &lt;span style="color: green"&gt;&amp;#039;=&amp;#039;&lt;/span&gt; . trim(substr(&lt;span style="color: #600"&gt;$attr&lt;/span&gt;, &lt;span style="color: #600"&gt;$p&lt;/span&gt; + &lt;span style="color: red"&gt;1&lt;/span&gt;));
                }
            }
            &lt;span style="color: #600"&gt;$attrs&lt;/span&gt; = count(&lt;span style="color: #600"&gt;$attrs&lt;/span&gt;) ? (&lt;span style="color: green"&gt;&amp;#039; &amp;#039;&lt;/span&gt; . implode(&lt;span style="color: green"&gt;&amp;#039; &amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$attrs&lt;/span&gt;)) : &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
        }
   
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;lt;&amp;#039;&lt;/span&gt; . &lt;span style="color: #600"&gt;$tagName&lt;/span&gt; . &lt;span style="color: #600"&gt;$attrs&lt;/span&gt; . (&lt;span style="color: #600"&gt;$isSelfClosed&lt;/span&gt; ? &lt;span style="color: green"&gt;&amp;#039;/&amp;gt;&amp;#039;&lt;/span&gt; : &lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;#039;&lt;/span&gt;);
    }
}
 
&lt;span style="color: #600"&gt;$t&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyHtmlTidy();
 
&lt;span style="color: #600"&gt;$html&lt;/span&gt; = &lt;span style="color: #008282"&gt;&amp;lt;&amp;lt;&amp;lt;HTML&lt;/span&gt;&lt;span style="color: green"&gt;
&amp;lt;p class=&amp;#039;blabla&amp;#039;&amp;gt;dslkldsldslsd&amp;lt;br&amp;gt;
kjksdjsdk&amp;lt;a href=&amp;quot;http://thesite.name/path&amp;quot; target=&amp;quot;_new&amp;quot; title=&amp;quot;ololo&amp;quot; onclick=&amp;quot;javascript:doit(&amp;#039;xxx&amp;#039;)&amp;quot;&amp;gt;djdkjdk&amp;lt;/a&amp;gt;
&amp;lt;img src=0.gif alt=&amp;#039;pysh-pysh&amp;#039;&amp;gt;
ds;lsd;; &amp;lt;b&amp;gt;skjskjsk kjdkjdkd
&lt;/span&gt;&lt;span style="color: #008282"&gt;HTML;&lt;/span&gt;
 
header(&lt;span style="color: green"&gt;&amp;#039;Content-type: text/plain&amp;#039;&lt;/span&gt;);
 
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: #600"&gt;$html&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;quot;\n===========================\n&amp;quot;&lt;/span&gt;;
 
&lt;span style="color: #600"&gt;$preparsed&lt;/span&gt; = &lt;span style="color: #600"&gt;$t&lt;/span&gt;-&amp;gt;preparse(&lt;span style="color: #600"&gt;$html&lt;/span&gt;);
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff"&gt;empty&lt;/span&gt;(&lt;span style="color: #600"&gt;$t&lt;/span&gt;-&amp;gt;errors)) {
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; implode(&lt;span style="color: green"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;, &lt;span style="color: #600"&gt;$t&lt;/span&gt;-&amp;gt;errors);
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;quot;\n===========================\n&amp;quot;&lt;/span&gt;;
}
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: #600"&gt;$preparsed&lt;/span&gt;;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Выводит:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;&lt;tr&gt;&lt;td style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #009;"&gt;&amp;lt;p class=&lt;span style="color: green"&gt;&amp;#039;blabla&amp;#039;&lt;/span&gt;&amp;gt;&lt;/span&gt;dslkldsldslsd&lt;span style="color: #009;"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
kjksdjsdk&lt;span style="color: #06d"&gt;&amp;lt;a href=&lt;span style="color: green"&gt;&amp;quot;http://thesite.name/path&amp;quot;&lt;/span&gt; target=&lt;span style="color: green"&gt;&amp;quot;_new&amp;quot;&lt;/span&gt; title=&lt;span style="color: green"&gt;&amp;quot;ololo&amp;quot;&lt;/span&gt; onclick=&lt;span style="color: green"&gt;&amp;quot;javascript:doit(&amp;#039;xxx&amp;#039;)&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;djdkjdk&lt;span style="color: #06d"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span style="color: #930"&gt;&amp;lt;img src=&lt;span style="color: red"&gt;0.&lt;/span&gt;gif alt=&lt;span style="color: green"&gt;&amp;#039;pysh-pysh&amp;#039;&lt;/span&gt;&amp;gt;&lt;/span&gt;
ds;lsd;; &lt;span style="color: #009;"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;skjskjsk kjdkjdkd
===========================
Tag p cannot have attributes
Wrong a attribute target
Wrong a attribute onclick
Unclosed tags p, b
===========================
&lt;span style="color: #009;"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;dslkldsldslsd&lt;span style="color: #009;"&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;
kjksdjsdk&lt;span style="color: #06d"&gt;&amp;lt;a href=&lt;span style="color: green"&gt;&amp;quot;http://thesite.name/path&amp;quot;&lt;/span&gt; title=&lt;span style="color: green"&gt;&amp;quot;ololo&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;djdkjdk&lt;span style="color: #06d"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span style="color: #930"&gt;&amp;lt;img src=&lt;span style="color: red"&gt;0.&lt;/span&gt;gif alt=&lt;span style="color: green"&gt;&amp;#039;pysh-pysh&amp;#039;&lt;/span&gt;/&amp;gt;&lt;/span&gt;
ds;lsd;; &lt;span style="color: #009;"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;skjskjsk kjdkjdkd&lt;span style="color: #009;"&gt;&amp;lt;/b&amp;gt;&lt;/span&gt;&lt;span style="color: #009;"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

&lt;a href="http://pyha.ru/forum/topic/5784.15"&gt;Скопипаситл с пыхи&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-3198673359905491206?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/3198673359905491206/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/3198673359905491206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/3198673359905491206'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/html.html' title='Парсер простого HTML'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1326999603863539044</id><published>2010-12-26T02:22:00.000-08:00</published><updated>2010-12-26T02:30:57.729-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='нейронные сети'/><category scheme='http://www.blogger.com/atom/ns#' term='ИИ'/><title type='text'>Пример нейронной сети на PHP</title><content type='html'>ИИ всегда интересовал меня. Если верить фантастам да и статьям из эпохи первых компьютеров, в наше время мы должны уже жить вместе с роботами с искусственным интеллектом. Но до сих пор, на сколько мне известно, разумного, мыслящего ИИ не создано.&lt;br&gt;
&lt;br&gt;
Чтобы немного представить как работает нейронанная сеть, можно воспользоваться ниже приведенным примером:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #808080"&gt;/*
  Пример нейронной сети, которая учится отличать
  маленькие русские буквы от всех остальных.
  Язык - php.
  Пожалуйста, не удаляйте этот текст при копировании. (c) Секрет. Realme.ru
*/&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; S { &lt;span style="color: #808080"&gt;// глаза сети. Каждый глазик видит свою часть данных.&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; &lt;span style="color: #600"&gt;$input&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;
}
&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; A { &lt;span style="color: #808080"&gt;// нейроны&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; &lt;span style="color: #600"&gt;$inputWeights&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(); &lt;span style="color: #808080"&gt;// нейрон связан с каждым глазом с разной силой.&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; &lt;span style="color: #600"&gt;$active&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;
&lt;span style="color: #808080"&gt;/*
  нейрон получает от всех глаз данные, единицу или ноль.
  Умножаем на силу связи глаз-нейрон, считаем среднее,
  сравниваем с 0.2 - это число выбрано интуитивно.
  Если поставить 1, сети потребуется в 4-5 раз больше обучающих примеров.
*/&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; think(&lt;span style="color: #600"&gt;$s&lt;/span&gt;){
    reset(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;inputWeights);
    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;active=&lt;span style="color: red"&gt;0&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(&lt;span style="color: #600"&gt;$temp&lt;/span&gt;=each(&lt;span style="color: #600"&gt;$s&lt;/span&gt;)) {
       &lt;span style="color: #600"&gt;$temp2&lt;/span&gt;=each(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;inputWeights);
       &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;active+=(&lt;span style="color: #600"&gt;$temp&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;]-&amp;gt;input)*&lt;span style="color: #600"&gt;$temp2&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;];
    }
    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;active/=count(&lt;span style="color: #600"&gt;$s&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;active=(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;active &amp;gt; &lt;span style="color: red"&gt;0.2&lt;/span&gt;);
  }
&lt;span style="color: #808080"&gt;/*
при создании нейрона связываем с глазами случайным образом.
*/&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct(&lt;span style="color: #600"&gt;$s&lt;/span&gt;){
    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;inputWeights=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
    reset(&lt;span style="color: #600"&gt;$s&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(&lt;span style="color: #600"&gt;$temp&lt;/span&gt;=each(&lt;span style="color: #600"&gt;$s&lt;/span&gt;)) {
       &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;inputWeights[]=mt_rand(&lt;span style="color: red"&gt;0&lt;/span&gt;,&lt;span style="color: red"&gt;100&lt;/span&gt;)/&lt;span style="color: red"&gt;100&lt;/span&gt;;
    }
  }
}

&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; R {  &lt;span style="color: #808080"&gt;// Решатель. Смотрит, что пришло от нейронов, считает среднее, выдаёт ответ.&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; &lt;span style="color: #600"&gt;$answer&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
  &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; think(&lt;span style="color: #600"&gt;$a&lt;/span&gt;){
    &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;answer=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt;(&lt;span style="color: #600"&gt;$temp&lt;/span&gt;=each(&lt;span style="color: #600"&gt;$a&lt;/span&gt;)) {
       &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;answer[]=&lt;span style="color: #600"&gt;$temp&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;]-&amp;gt;active;
    }
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ((array_sum(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;answer)/count(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;answer)) &amp;gt; &lt;span style="color: red"&gt;0.5&lt;/span&gt;);
  }
}

&lt;span style="color: #600"&gt;$s&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
&lt;span style="color: #600"&gt;$a&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();

&lt;span style="color: #808080"&gt;// В символе восемь бит. Сделаем 8 глаз.&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$q&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;8&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;++) &lt;span style="color: #600"&gt;$s&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; S();
&lt;span style="color: #808080"&gt;/*
 Cделаем 20 нейронов. Собственно, для решения этой задачи достаточно
 одного нейрона, он нормально обучается. Стоит 20 просто для примера.
*/&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$q&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;20&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;++) &lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; A(&lt;span style="color: #600"&gt;$s&lt;/span&gt;);
&lt;span style="color: #600"&gt;$r&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; R(); 

&lt;span style="color: #600"&gt;$correct&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$ww&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$ww&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;10000&lt;/span&gt;;&lt;span style="color: #600"&gt;$ww&lt;/span&gt;++){ &lt;span style="color: #808080"&gt;// просто цикл.&lt;/span&gt;

&lt;span style="color: #600"&gt;$input&lt;/span&gt;=rand(&lt;span style="color: red"&gt;0&lt;/span&gt;,&lt;span style="color: red"&gt;255&lt;/span&gt;);
&lt;span style="color: #808080"&gt;/*
  Буква ё сложная для обучения, у неё код символа далеко от остальных русских букв.
  Поэтому увеличим частоту её выпадания.
*/&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (rand(&lt;span style="color: red"&gt;1&lt;/span&gt;,&lt;span style="color: red"&gt;100&lt;/span&gt;)==&lt;span style="color: red"&gt;1&lt;/span&gt;) &lt;span style="color: #600"&gt;$input&lt;/span&gt;=ord(&lt;span style="color: green"&gt;&amp;#039;ё&amp;#039;&lt;/span&gt;);
&lt;span style="color: #808080"&gt;// правильный ответ нужен для процесса обучения.&lt;/span&gt;
&lt;span style="color: #600"&gt;$answer&lt;/span&gt;=(((&lt;span style="color: #600"&gt;$input&lt;/span&gt;&amp;lt;=ord(&lt;span style="color: green"&gt;&amp;#039;я&amp;#039;&lt;/span&gt;))&lt;span style="color: #0000ff"&gt;AND&lt;/span&gt;(&lt;span style="color: #600"&gt;$input&lt;/span&gt;&amp;gt;=ord(&lt;span style="color: green"&gt;&amp;#039;а&amp;#039;&lt;/span&gt;)))&lt;span style="color: #0000ff"&gt;OR&lt;/span&gt;(ord(&lt;span style="color: green"&gt;&amp;#039;ё&amp;#039;&lt;/span&gt;)==&lt;span style="color: #600"&gt;$input&lt;/span&gt;));
&lt;span style="color: #808080"&gt;// ну или preg_match(&amp;#039;/[а-яё]/&amp;#039;,$input);, кому так понятнее.&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$q&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;8&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;++) &lt;span style="color: #600"&gt;$s&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]-&amp;gt;input=(&lt;span style="color: #600"&gt;$input&lt;/span&gt; &amp;amp; pow(&lt;span style="color: red"&gt;2&lt;/span&gt;,&lt;span style="color: #600"&gt;$q&lt;/span&gt;)) &amp;gt;&amp;gt; &lt;span style="color: #600"&gt;$q&lt;/span&gt;;  &lt;span style="color: #808080"&gt;// глазки смотрят.&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$q&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;20&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;++) &lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]-&amp;gt;think(&lt;span style="color: #600"&gt;$s&lt;/span&gt;); &lt;span style="color: #808080"&gt;// нейроны думают.&lt;/span&gt;
&lt;span style="color: #808080"&gt;/*
  Процесс обучения.
  Для каждого нейрона смотрим, ответил ли он правильно.
  Почему нейрон ошибается? Потому что не знает, от каких глаз данные важнее.
  Например, если старший бит ноль, то русской буквой символ точно быть не может.
  Этого нейрон не поймёт, но научиться, что данные от старшего бита важнее, он может.
  Изменяем силу связи с теми глазами, которые видели единицу.
  Единицы от одних глаз станут влиять на результат сильнее, от других - слабее.
*/&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(&lt;span style="color: #600"&gt;$q&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;&amp;lt;&lt;span style="color: red"&gt;20&lt;/span&gt;;&lt;span style="color: #600"&gt;$q&lt;/span&gt;++) &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]-&amp;gt;active != &lt;span style="color: #600"&gt;$answer&lt;/span&gt;) {
  &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;(&lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]-&amp;gt;inputWeights &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$k&lt;/span&gt;=&amp;gt;&lt;span style="color: #600"&gt;$v&lt;/span&gt;){
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$s&lt;/span&gt;[&lt;span style="color: #600"&gt;$k&lt;/span&gt;]-&amp;gt;input) {
      &lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$q&lt;/span&gt;]-&amp;gt;inputWeights[&lt;span style="color: #600"&gt;$k&lt;/span&gt;]+=((&lt;span style="color: #600"&gt;$answer&lt;/span&gt;)?&lt;span style="color: red"&gt;0.01&lt;/span&gt;:-&lt;span style="color: red"&gt;0.01&lt;/span&gt;);
    }
  }
}
&lt;span style="color: #600"&gt;$think&lt;/span&gt;=&lt;span style="color: #600"&gt;$r&lt;/span&gt;-&amp;gt;think(&lt;span style="color: #600"&gt;$a&lt;/span&gt;);
&lt;span style="color: #808080"&gt;// считаем, сколько раз подряд ответили верно.&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$think&lt;/span&gt; == &lt;span style="color: #600"&gt;$answer&lt;/span&gt;) {
  &lt;span style="color: #600"&gt;$correct&lt;/span&gt;++;
} &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
  &lt;span style="color: #600"&gt;$correct&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;;
}
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; (int)&lt;span style="color: #600"&gt;$think&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; (int)&lt;span style="color: #600"&gt;$answer&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039; &amp;#039;&lt;/span&gt;.chr(&lt;span style="color: #600"&gt;$input&lt;/span&gt;).&lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$correct&lt;/span&gt;&amp;gt;&lt;span style="color: red"&gt;500&lt;/span&gt;) {
  &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;quot;Для обучения сети потребовалось &lt;span style="color: #600"&gt;$ww&lt;/span&gt; обучающих примеров.&amp;quot;&lt;/span&gt;;
  &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
}
}

var_dump(&lt;span style="color: #600"&gt;$s&lt;/span&gt;);
var_dump(&lt;span style="color: #600"&gt;$a&lt;/span&gt;);
var_dump(&lt;span style="color: #600"&gt;$r&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Пример &lt;a href="http://www.realme.ru/2008/06/17/iskustvennaja-nejjronnaja-set-primer/"&gt;взял вот отсюда&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1326999603863539044?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1326999603863539044/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/php_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1326999603863539044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1326999603863539044'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/php_26.html' title='Пример нейронной сети на PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-702839336934161484</id><published>2010-12-22T02:33:00.000-08:00</published><updated>2010-12-22T02:38:05.607-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DEMO'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>1kb javascript =  3d елка + снежинки</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #009;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span style="color: #700;"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span style="color: #009;"&gt;&amp;lt;canvas id=&lt;span style="color: green"&gt;&amp;quot;c&amp;quot;&lt;/span&gt; height=&lt;span style="color: green"&gt;&amp;quot;446&amp;quot;&lt;/span&gt; width=&lt;span style="color: green"&gt;&amp;quot;446&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #009;"&gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
 
    &lt;span style="color: #00b200"&gt;&amp;lt;script type=&lt;span style="color: green"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; b = document.body;
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; c = document.getElementsByTagName(&lt;span style="color: green"&gt;&amp;#039;canvas&amp;#039;&lt;/span&gt;)[&lt;span style="color: red"&gt;0&lt;/span&gt;];
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; a = c.getContext(&lt;span style="color: green"&gt;&amp;#039;2d&amp;#039;&lt;/span&gt;);
    document.body.clientWidth; &lt;span style="color: #808080"&gt;// fix bug in chrome.&lt;/span&gt;

    M = Math;
    Q = M.random;
    J = [];
    U = &lt;span style="color: red"&gt;16&lt;/span&gt;;
    T = M.sin;
    E = M.sqrt;
    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (O = k = &lt;span style="color: red"&gt;0&lt;/span&gt;; x = z = j = i = k &amp;lt; &lt;span style="color: red"&gt;200&lt;/span&gt;;) with(M[k] = k ? c.cloneNode(&lt;span style="color: red"&gt;0&lt;/span&gt;) : c) {
        width = height = k ? &lt;span style="color: red"&gt;32&lt;/span&gt; : W = &lt;span style="color: red"&gt;446&lt;/span&gt;;
        with(getContext(&lt;span style="color: green"&gt;&amp;#039;2d&amp;#039;&lt;/span&gt;)) &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (k &amp;gt; &lt;span style="color: red"&gt;10&lt;/span&gt; | !k) &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (font = &lt;span style="color: green"&gt;&amp;#039;60px Impact&amp;#039;&lt;/span&gt;, V = &lt;span style="color: green"&gt;&amp;#039;rgba(&amp;#039;&lt;/span&gt;; I = i * U, fillStyle = k ? k == &lt;span style="color: red"&gt;13&lt;/span&gt; ? V + &lt;span style="color: green"&gt;&amp;#039;205,205,215,.15)&amp;#039;&lt;/span&gt; : V + (&lt;span style="color: red"&gt;147&lt;/span&gt; + I) + &lt;span style="color: green"&gt;&amp;#039;,&amp;#039;&lt;/span&gt; + (k % &lt;span style="color: red"&gt;2&lt;/span&gt; ? &lt;span style="color: red"&gt;128&lt;/span&gt; + I : &lt;span style="color: red"&gt;0&lt;/span&gt;) + &lt;span style="color: green"&gt;&amp;#039;,&amp;#039;&lt;/span&gt; + I + &lt;span style="color: green"&gt;&amp;#039;,.5)&amp;#039;&lt;/span&gt; : &lt;span style="color: green"&gt;&amp;#039;#cca&amp;#039;&lt;/span&gt;, i &amp;lt; &lt;span style="color: red"&gt;7&lt;/span&gt;;) beginPath(fill(arc(U - i / &lt;span style="color: red"&gt;3&lt;/span&gt;, &lt;span style="color: red"&gt;24&lt;/span&gt; - i / &lt;span style="color: red"&gt;2&lt;/span&gt;, k == &lt;span style="color: red"&gt;13&lt;/span&gt; ? &lt;span style="color: red"&gt;4&lt;/span&gt; - (i++) / &lt;span style="color: red"&gt;2&lt;/span&gt; : &lt;span style="color: red"&gt;8&lt;/span&gt; - i++, &lt;span style="color: red"&gt;0&lt;/span&gt;, M.PI * &lt;span style="color: red"&gt;2&lt;/span&gt;, &lt;span style="color: red"&gt;1&lt;/span&gt;)));
        &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (; x = T(i), y = Q() * &lt;span style="color: red"&gt;2&lt;/span&gt; - &lt;span style="color: red"&gt;1&lt;/span&gt;, D = x * x + y * y, B = E(D - x / &lt;span style="color: red"&gt;.9&lt;/span&gt; - &lt;span style="color: red"&gt;1.5&lt;/span&gt; * y + &lt;span style="color: red"&gt;1&lt;/span&gt;), R = &lt;span style="color: red"&gt;67&lt;/span&gt; * (B + &lt;span style="color: red"&gt;1&lt;/span&gt;) * (L = k / &lt;span style="color: red"&gt;9&lt;/span&gt; + &lt;span style="color: red"&gt;.8&lt;/span&gt;) &amp;gt;&amp;gt; &lt;span style="color: red"&gt;1&lt;/span&gt;, i++&amp;lt;W;) &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (D &amp;lt; &lt;span style="color: red"&gt;1&lt;/span&gt;) beginPath(strokeStyle = V + R + &lt;span style="color: green"&gt;&amp;#039;,&amp;#039;&lt;/span&gt; + (R + B * L &amp;gt;&amp;gt; &lt;span style="color: red"&gt;0&lt;/span&gt;) + &lt;span style="color: green"&gt;&amp;#039;,40,.1)&amp;#039;&lt;/span&gt;),
        moveTo(U + x * &lt;span style="color: red"&gt;8&lt;/span&gt;, U + y * &lt;span style="color: red"&gt;8&lt;/span&gt;),
        lineTo(U + x * U, U + y * U),
        stroke();
        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (y = H = k + E(k++) * &lt;span style="color: red"&gt;25&lt;/span&gt;, R = Q() * W; P = &lt;span style="color: red"&gt;3&lt;/span&gt;, j &amp;lt; H;) J[O++] = [x += T(R) * P + Q() * &lt;span style="color: red"&gt;6&lt;/span&gt; - &lt;span style="color: red"&gt;3&lt;/span&gt;, y += Q() * U - &lt;span style="color: red"&gt;8&lt;/span&gt;, z += T(R - &lt;span style="color: red"&gt;11&lt;/span&gt;) * P + Q() * &lt;span style="color: red"&gt;6&lt;/span&gt; - &lt;span style="color: red"&gt;3&lt;/span&gt;, j / H * &lt;span style="color: red"&gt;20&lt;/span&gt; + ((j += U) &amp;gt; H &amp;amp; Q() &amp;gt; &lt;span style="color: red"&gt;.8&lt;/span&gt; ? Q(P = &lt;span style="color: red"&gt;9&lt;/span&gt;) * &lt;span style="color: red"&gt;4&lt;/span&gt; : &lt;span style="color: red"&gt;0&lt;/span&gt;) &amp;gt;&amp;gt; &lt;span style="color: red"&gt;1&lt;/span&gt;]
    }
    setInterval(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; G(m, l) {
        A = T(D - &lt;span style="color: red"&gt;11&lt;/span&gt;);
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (l) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (m[&lt;span style="color: red"&gt;2&lt;/span&gt;] - l[&lt;span style="color: red"&gt;2&lt;/span&gt;]) * A + (l[&lt;span style="color: red"&gt;0&lt;/span&gt;] - m[&lt;span style="color: red"&gt;0&lt;/span&gt;]) * T(D);
        a.clearRect(&lt;span style="color: red"&gt;0&lt;/span&gt;, &lt;span style="color: red"&gt;0&lt;/span&gt;, W, W);
        J.sort(G);
        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (i = &lt;span style="color: red"&gt;0&lt;/span&gt;; L = J[i++]; a.drawImage(M[L[&lt;span style="color: red"&gt;3&lt;/span&gt;] + &lt;span style="color: red"&gt;1&lt;/span&gt;], &lt;span style="color: red"&gt;207&lt;/span&gt; + L[&lt;span style="color: red"&gt;0&lt;/span&gt;] * A + L[&lt;span style="color: red"&gt;2&lt;/span&gt;] * T(D) &amp;gt;&amp;gt; &lt;span style="color: red"&gt;0&lt;/span&gt;, L[&lt;span style="color: red"&gt;1&lt;/span&gt;] &amp;gt;&amp;gt; &lt;span style="color: red"&gt;1&lt;/span&gt;)) {
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (i == &lt;span style="color: red"&gt;2e3&lt;/span&gt;) a.fillText(&lt;span style="color: green"&gt;&amp;#039;ЕУЫЕ!&amp;#039;&lt;/span&gt;, U, &lt;span style="color: red"&gt;345&lt;/span&gt;);
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (! (i % &lt;span style="color: red"&gt;7&lt;/span&gt;)) a.drawImage(M[&lt;span style="color: red"&gt;13&lt;/span&gt;], ((&lt;span style="color: red"&gt;157&lt;/span&gt; * (i * i) + T(D * &lt;span style="color: red"&gt;5&lt;/span&gt; + i * i) * &lt;span style="color: red"&gt;5&lt;/span&gt;) % W) &amp;gt;&amp;gt; &lt;span style="color: red"&gt;0&lt;/span&gt;, ((&lt;span style="color: red"&gt;113&lt;/span&gt; * i + (D * i) / &lt;span style="color: red"&gt;60&lt;/span&gt;) % (&lt;span style="color: red"&gt;290&lt;/span&gt; + i / &lt;span style="color: red"&gt;99&lt;/span&gt;)) &amp;gt;&amp;gt; &lt;span style="color: red"&gt;0&lt;/span&gt;);
        }
        D += &lt;span style="color: red"&gt;.02&lt;/span&gt;
    },
    &lt;span style="color: red"&gt;1&lt;/span&gt;)

    &lt;span style="color: #00b200"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span style="color: #700;"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span style="color: #009;"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

По моему офигенско! смотреть лучше в Chrome&lt;br&gt;
&lt;a href="http://js1k.com/2010-xmas/demo/856"&gt;Демка&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-702839336934161484?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/702839336934161484/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/1kb-javascript-3d.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/702839336934161484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/702839336934161484'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/1kb-javascript-3d.html' title='1kb javascript =  3d елка + снежинки'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1701552404908972935</id><published>2010-12-15T21:56:00.000-08:00</published><updated>2010-12-15T22:10:00.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Парсинг'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Удобный класс для парсинга HTML на PHP</title><content type='html'>Сам класс с примерами работы:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&amp;lt;?php

&lt;span style="color: #600"&gt;$html&lt;/span&gt; = gzdecode(file_get_contents(&lt;span style="color: green"&gt;&amp;#039;http://habrahabr.ru/&amp;#039;&lt;/span&gt;));

&lt;span style="color: #600"&gt;$saw&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; nokogiri(&lt;span style="color: #600"&gt;$html&lt;/span&gt;);
var_dump(&lt;span style="color: #600"&gt;$saw&lt;/span&gt;-&amp;gt;get(&lt;span style="color: green"&gt;&amp;#039;a.habracut&amp;#039;&lt;/span&gt;)-&amp;gt;toArray());
&lt;span style="color: #808080"&gt;/* На выходе: Array(6) { [0]=&amp;gt; array(3) { 
 [&amp;quot;class&amp;quot;]=&amp;gt; string(8) &amp;quot;habracut&amp;quot;
 [&amp;quot;href&amp;quot;]=&amp;gt; string(56) &amp;quot;http://habrahabr.ru/blogs/google_chrome/110099/#habracut&amp;quot;
 [&amp;quot;#text&amp;quot;]=&amp;gt; string(29) &amp;quot;Читать дальше &amp;gt;&amp;quot; } [1]=&amp;gt; ....
*/&lt;/span&gt; 
var_dump(&lt;span style="color: #600"&gt;$saw&lt;/span&gt;-&amp;gt;get(&lt;span style="color: green"&gt;&amp;#039;ul.panel-nav-top li.current&amp;#039;&lt;/span&gt;)-&amp;gt;toArray());
&lt;span style="color: #808080"&gt;/* На выходе: array(2) {
 [&amp;quot;class&amp;quot;]=&amp;gt; string(7) &amp;quot;current&amp;quot; [&amp;quot;a&amp;quot;]=&amp;gt; array(3) {
 [&amp;quot;href&amp;quot;]=&amp;gt; string(20) &amp;quot;http://habrahabr.ru/&amp;quot;
 [&amp;quot;class&amp;quot;]=&amp;gt; string(8) &amp;quot;disabled&amp;quot;
 [&amp;quot;#text&amp;quot;]=&amp;gt; string(10) &amp;quot;Посты&amp;quot; } }
*/&lt;/span&gt; 
var_dump(&lt;span style="color: #600"&gt;$saw&lt;/span&gt;-&amp;gt;get(&lt;span style="color: green"&gt;&amp;#039;#sidebar dl.air-comment a.topic&amp;#039;&lt;/span&gt;)-&amp;gt;toArray());
&lt;span style="color: #808080"&gt;/* На выходе: array(50) {
 [0]=&amp;gt; array(3) { [&amp;quot;class&amp;quot;]=&amp;gt; string(5) &amp;quot;topic&amp;quot;
 [&amp;quot;href&amp;quot;]=&amp;gt; string(36) &amp;quot;http://habrahabr.ru/blogs/os/110045/&amp;quot;
 [&amp;quot;#text&amp;quot;]=&amp;gt; string(63) &amp;quot;ФБР внедряло backdoor&amp;#039;ы в IPSec код OpenBSD (?)&amp;quot; } [1]=&amp;gt; array(3) { [&amp;quot;cl
*/&lt;/span&gt;
var_dump(&lt;span style="color: #600"&gt;$saw&lt;/span&gt;-&amp;gt;get(&lt;span style="color: green"&gt;&amp;#039;a[rel=bookmark]&amp;#039;&lt;/span&gt;)-&amp;gt;toArray());
&lt;span style="color: #808080"&gt;/* На выходе: array(10) {
 [0]=&amp;gt; array(4) {
 [&amp;quot;rel&amp;quot;]=&amp;gt; string(8) &amp;quot;bookmark&amp;quot;
 [&amp;quot;href&amp;quot;]=&amp;gt; string(47) &amp;quot;http://habrahabr.ru/blogs/google_chrome/110099/&amp;quot;
 [&amp;quot;class&amp;quot;]=&amp;gt; string(5) &amp;quot;topic&amp;quot; [&amp;quot;#text&amp;quot;]=&amp;gt; string(100) &amp;quot;Google объявил Chrome готовым...&amp;quot; }
 [1]=&amp;gt; array(4) {
 [&amp;quot;rel&amp;quot;]=
*/&lt;/span&gt;

&lt;span style="color: #808080"&gt;/**
 * Description of nokogiri
 *
 * &lt;b style="text-decoration: underline;"&gt;@author&lt;/b&gt; olamedia
 */&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; nokogiri &lt;span style="color: #0000ff"&gt;implements&lt;/span&gt; IteratorAggregate{
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #600"&gt;$_source&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
    &lt;span style="color: #808080"&gt;/**
     * &lt;b style="text-decoration: underline;"&gt;@var&lt;/b&gt; DOMDocument
     */&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #600"&gt;$_dom&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
    &lt;span style="color: #808080"&gt;/**
     * &lt;b style="text-decoration: underline;"&gt;@var&lt;/b&gt; DOMXpath
     * */&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #600"&gt;$_xpath&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __construct(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;loadHtml(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt;);
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; fromHtml(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$me&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$me&lt;/span&gt;-&amp;gt;loadHtml(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt;);
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$me&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; fromDom(&lt;span style="color: #600"&gt;$dom&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$me&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$me&lt;/span&gt;-&amp;gt;loadDom(&lt;span style="color: #600"&gt;$dom&lt;/span&gt;);
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$me&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; loadDom(&lt;span style="color: #600"&gt;$dom&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_dom = &lt;span style="color: #600"&gt;$dom&lt;/span&gt;;
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_xpath = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DOMXpath(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_dom);
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; loadHtml(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$dom&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DOMDocument(&lt;span style="color: green"&gt;&amp;#039;1.0&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;UTF-8&amp;#039;&lt;/span&gt;);
        &lt;span style="color: #600"&gt;$dom&lt;/span&gt;-&amp;gt;preserveWhiteSpace = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt;)){
            libxml_use_internal_errors(&lt;span style="color: #0000ff"&gt;TRUE&lt;/span&gt;);
            &lt;span style="color: #600"&gt;$dom&lt;/span&gt;-&amp;gt;loadHTML(&lt;span style="color: #600"&gt;$htmlString&lt;/span&gt;);
            libxml_clear_errors();
        }
        &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;loadDom(&lt;span style="color: #600"&gt;$dom&lt;/span&gt;);
    }
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; __invoke(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;){
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;get(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;);
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; get(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;){
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strpos(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039; &amp;#039;&lt;/span&gt;) !== &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;){
            &lt;span style="color: #600"&gt;$a&lt;/span&gt; = explode(&lt;span style="color: green"&gt;&amp;#039; &amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$expression&lt;/span&gt;);
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$a&lt;/span&gt; &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$k&lt;/span&gt; =&amp;gt; &lt;span style="color: #600"&gt;$sub&lt;/span&gt;){
                &lt;span style="color: #600"&gt;$a&lt;/span&gt;[&lt;span style="color: #600"&gt;$k&lt;/span&gt;] = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;getXpathSubquery(&lt;span style="color: #600"&gt;$sub&lt;/span&gt;);
            }
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;getElements(implode(&lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$a&lt;/span&gt;));
        }
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;getElements(&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;getXpathSubquery(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;));
    }
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getXpathSubquery(&lt;span style="color: #600"&gt;$expression&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$query&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (preg_match(&lt;span style="color: green"&gt;&amp;quot;/(?P&amp;lt;tag&amp;gt;[a-z0-9]+)?
                        (\[(?P&amp;lt;attr&amp;gt;\S+)=(?P&amp;lt;value&amp;gt;\S+)\])?
                        (#(?P&amp;lt;id&amp;gt;\S+))?
                        (\.(?P&amp;lt;class&amp;gt;\S+))?/ims&amp;quot;&lt;/span&gt;, &lt;span style="color: #600"&gt;$expression&lt;/span&gt;, &lt;span style="color: #600"&gt;$subs&lt;/span&gt;)){
            &lt;span style="color: #600"&gt;$tag&lt;/span&gt; = &lt;span style="color: #600"&gt;$subs&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;tag&amp;#039;&lt;/span&gt;];
            &lt;span style="color: #600"&gt;$id&lt;/span&gt; = &lt;span style="color: #600"&gt;$subs&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;id&amp;#039;&lt;/span&gt;];
            &lt;span style="color: #600"&gt;$attr&lt;/span&gt; = &lt;span style="color: #600"&gt;$subs&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;attr&amp;#039;&lt;/span&gt;];
            &lt;span style="color: #600"&gt;$attrValue&lt;/span&gt; = &lt;span style="color: #600"&gt;$subs&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;value&amp;#039;&lt;/span&gt;];
            &lt;span style="color: #600"&gt;$class&lt;/span&gt; = &lt;span style="color: #600"&gt;$subs&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;class&amp;#039;&lt;/span&gt;];
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!strlen(&lt;span style="color: #600"&gt;$tag&lt;/span&gt;))
                &lt;span style="color: #600"&gt;$tag&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;*&amp;#039;&lt;/span&gt;;
            &lt;span style="color: #600"&gt;$query&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;//&amp;#039;&lt;/span&gt;.&lt;span style="color: #600"&gt;$tag&lt;/span&gt;;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$id&lt;/span&gt;)){
                &lt;span style="color: #600"&gt;$query&lt;/span&gt; .= &lt;span style="color: green"&gt;&amp;quot;[@id=&amp;#039;&amp;quot;&lt;/span&gt;.&lt;span style="color: #600"&gt;$id&lt;/span&gt;.&lt;span style="color: green"&gt;&amp;quot;&amp;#039;]&amp;quot;&lt;/span&gt;;
            }
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$attr&lt;/span&gt;)){
                &lt;span style="color: #600"&gt;$query&lt;/span&gt; .= &lt;span style="color: green"&gt;&amp;quot;[@&amp;quot;&lt;/span&gt;.&lt;span style="color: #600"&gt;$attr&lt;/span&gt;.&lt;span style="color: green"&gt;&amp;quot;=&amp;#039;&amp;quot;&lt;/span&gt;.&lt;span style="color: #600"&gt;$attrValue&lt;/span&gt;.&lt;span style="color: green"&gt;&amp;quot;&amp;#039;]&amp;quot;&lt;/span&gt;;
            }
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$class&lt;/span&gt;)){
                &lt;span style="color: #808080"&gt;//$query .= &amp;quot;[@class=&amp;#039;&amp;quot;.$class.&amp;quot;&amp;#039;]&amp;quot;;&lt;/span&gt;
                &lt;span style="color: #600"&gt;$query&lt;/span&gt; .= &lt;span style="color: green"&gt;&amp;#039;[contains(concat(&amp;quot; &amp;quot;, normalize-space(@class), &amp;quot; &amp;quot;), &amp;quot; &amp;#039;&lt;/span&gt;.&lt;span style="color: #600"&gt;$class&lt;/span&gt;.&lt;span style="color: green"&gt;&amp;#039; &amp;quot;)]&amp;#039;&lt;/span&gt;;
            }
        }
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$query&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getElements(&lt;span style="color: #600"&gt;$xpathQuery&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$newDom&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DOMDocument(&lt;span style="color: green"&gt;&amp;#039;1.0&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;UTF-8&amp;#039;&lt;/span&gt;);
        &lt;span style="color: #600"&gt;$root&lt;/span&gt; = &lt;span style="color: #600"&gt;$newDom&lt;/span&gt;-&amp;gt;createElement(&lt;span style="color: green"&gt;&amp;#039;root&amp;#039;&lt;/span&gt;);
        &lt;span style="color: #600"&gt;$newDom&lt;/span&gt;-&amp;gt;appendChild(&lt;span style="color: #600"&gt;$root&lt;/span&gt;);
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (strlen(&lt;span style="color: #600"&gt;$xpathQuery&lt;/span&gt;)){
            &lt;span style="color: #600"&gt;$nodeList&lt;/span&gt; = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_xpath-&amp;gt;query(&lt;span style="color: #600"&gt;$xpathQuery&lt;/span&gt;);
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$nodeList&lt;/span&gt; === &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;){
                &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Exception(&lt;span style="color: green"&gt;&amp;#039;Malformed xpath&amp;#039;&lt;/span&gt;);
            }
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$nodeList&lt;/span&gt; &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$domElement&lt;/span&gt;){
                &lt;span style="color: #600"&gt;$domNode&lt;/span&gt; = &lt;span style="color: #600"&gt;$newDom&lt;/span&gt;-&amp;gt;importNode(&lt;span style="color: #600"&gt;$domElement&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
                &lt;span style="color: #600"&gt;$root&lt;/span&gt;-&amp;gt;appendChild(&lt;span style="color: #600"&gt;$domNode&lt;/span&gt;);
            }
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;::fromDom(&lt;span style="color: #600"&gt;$newDom&lt;/span&gt;);
        }
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; toXml(){
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_dom-&amp;gt;saveXML();
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; toArray(&lt;span style="color: #600"&gt;$xnode&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;){
        &lt;span style="color: #600"&gt;$array&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$xnode&lt;/span&gt; === &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;){
            &lt;span style="color: #600"&gt;$node&lt;/span&gt; = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;_dom;
        }&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;{
            &lt;span style="color: #600"&gt;$node&lt;/span&gt; = &lt;span style="color: #600"&gt;$xnode&lt;/span&gt;;
        }
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;nodeType == XML_TEXT_NODE){
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;nodeValue;
        }
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;hasAttributes()){
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;attributes &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$attr&lt;/span&gt;){
                &lt;span style="color: #600"&gt;$array&lt;/span&gt;[&lt;span style="color: #600"&gt;$attr&lt;/span&gt;-&amp;gt;nodeName] = &lt;span style="color: #600"&gt;$attr&lt;/span&gt;-&amp;gt;nodeValue;
            }
        }
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;hasChildNodes()){
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;childNodes-&amp;gt;length == &lt;span style="color: red"&gt;1&lt;/span&gt;){
                &lt;span style="color: #600"&gt;$array&lt;/span&gt;[&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;firstChild-&amp;gt;nodeName] = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;toArray(&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;firstChild);
            }&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;{
                &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$node&lt;/span&gt;-&amp;gt;childNodes &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$childNode&lt;/span&gt;){
                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$childNode&lt;/span&gt;-&amp;gt;nodeType != XML_TEXT_NODE){
                        &lt;span style="color: #600"&gt;$array&lt;/span&gt;[&lt;span style="color: #600"&gt;$childNode&lt;/span&gt;-&amp;gt;nodeName][] = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;toArray(&lt;span style="color: #600"&gt;$childNode&lt;/span&gt;);
                    }
                }
            }
        }
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$xnode&lt;/span&gt; === &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;){
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; reset(reset(&lt;span style="color: #600"&gt;$array&lt;/span&gt;)); &lt;span style="color: #808080"&gt;// first child&lt;/span&gt;
        }
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$array&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getIterator(){
        &lt;span style="color: #600"&gt;$a&lt;/span&gt; = &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;toArray();
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayIterator(&lt;span style="color: #600"&gt;$a&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Ошибки html игнорируются.&lt;br&gt;
Распознаются вложеные теги (через пробел), а также конструкции вида .class, #id и [attr=value]&lt;br&gt;
Создание из строки: nokogiri::fromString($htmlString); или new nokogiri($htmlString);&lt;br&gt;
Создание из DomDocument: nokogiri::fromDom($dom);&lt;br&gt;
&lt;br&gt;
Требования:&lt;br&gt;
  DOM, libxml, php 5.3 (вероятно работает и со многими старыми версиями)&lt;br&gt;
  HTML на входе должен быть в кодировке UTF-8&lt;br&gt;

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$saw&lt;/span&gt;-&amp;gt;get(&lt;span style="color: green"&gt;&amp;#039;#sidebar a.topic&amp;#039;&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$link&lt;/span&gt;){
    var_dump(&lt;span style="color: #600"&gt;$link&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;#text&amp;#039;&lt;/span&gt;]);
}&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Предыдущие версии можно найти &lt;a href="http://code.google.com/p/kanon-framework/source/list?path=/trunk/src/parse/nokogiri.php"&gt;здесь.&lt;/a&gt;

&lt;a href="http://habrahabr.ru/blogs/php/110112/#habracut"&gt;Скопипастил с хабра&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1701552404908972935?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1701552404908972935/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/html-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1701552404908972935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1701552404908972935'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/html-php.html' title='Удобный класс для парсинга HTML на PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5337813951430751374</id><published>2010-12-15T10:28:00.000-08:00</published><updated>2010-12-15T10:48:12.545-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='mFram'/><title type='text'>mFram - мини MVC фреймворк PHP</title><content type='html'>&lt;h2&gt;mFram - мой мини фреймворк на PHP&lt;/h2&gt;&lt;p&gt;&lt;strong&gt; Зачем: &lt;/strong&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Чтобы лучше разобраться с MVC, ООП и патернами проектирования &lt;/li&gt;&lt;li&gt;Он очень простой, легкий и быстрый, особенно для меня &lt;/li&gt;&lt;li&gt;Я  немного разбирался с Zend Framework, Yii, на Code Igniter даже чегото  кодил ) но в каждом из них мне что то нравиться и что то нет &lt;/li&gt;&lt;li&gt;Я привык к шаблонизатору &lt;a style="font-weight: bold;" href="http://smarty.org"&gt;Smarty&lt;/a&gt; поэтому он здесь по умолчанию, можно его убрать и поставить например Twig и пр. &lt;/li&gt;&lt;li&gt;Мне понравился &lt;a style="font-weight: bold;" href="http://www.blueprintcss.org/"&gt;css framework blueprint&lt;/a&gt; и он тоже здесь есть &lt;/li&gt;&lt;li&gt;Мне нравиться мой стиль и формат кода :) нравиться когда первая буква переменной (префикс) означает ее тип: &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;a - массив
s - строка
i - число
f - число дробное
o - объект
h - указатель (handler)&lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/p/mfram/"&gt;http://code.google.com/p/mfram/&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5337813951430751374?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5337813951430751374/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/mfram-mvc-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5337813951430751374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5337813951430751374'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/mfram-mvc-php.html' title='mFram - мини MVC фреймворк PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-3019112529314912217</id><published>2010-12-15T01:13:00.000-08:00</published><updated>2010-12-15T01:30:29.410-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='DATE'/><title type='text'>Как прибавить к дате месяцы PHP, MySQL</title><content type='html'>Прибавить корректно месяцы к текущей дате средствами PHP не тривиальная задача.

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;date(&lt;span style="color: green"&gt;&amp;quot;d-m-Y&amp;quot;&lt;/span&gt;,mktime(&lt;span style="color: red"&gt;0&lt;/span&gt;,&lt;span style="color: red"&gt;0&lt;/span&gt;,&lt;span style="color: red"&gt;0&lt;/span&gt;,date(&lt;span style="color: green"&gt;&amp;quot;m&amp;quot;&lt;/span&gt;)+&lt;span style="color: red"&gt;1&lt;/span&gt;,date(&lt;span style="color: green"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;),date(&lt;span style="color: green"&gt;&amp;quot;Y&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Такой вариант возможен, если количество месяцев не перевалит за 12, т.е надо писать функцию...
&lt;br&gt;&lt;br&gt;
А вот на SQL гораздо проще все, поподробнее можно &lt;a href="http://www.mysql.ru/docs/man/Date_and_time_functions.html"&gt;посмотреть тут.&lt;/a&gt;

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #003388"&gt;NOW&lt;/span&gt;() + &lt;span style="color: #0066dd"&gt;INTERVAL&lt;/span&gt; &lt;span style="color: red"&gt;3&lt;/span&gt; &lt;span style="color: #003388"&gt;MONTH&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-3019112529314912217?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/3019112529314912217/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/php-mysql.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/3019112529314912217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/3019112529314912217'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/php-mysql.html' title='Как прибавить к дате месяцы PHP, MySQL'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1190027538455603700</id><published>2010-12-13T23:31:00.000-08:00</published><updated>2010-12-13T23:33:33.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Лучшая функция xml2array php</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; xml2array(&amp;amp;&lt;span style="color: #600"&gt;$string&lt;/span&gt;) {
    &lt;span style="color: #600"&gt;$parser&lt;/span&gt; = xml_parser_create();
    xml_parser_set_option(&lt;span style="color: #600"&gt;$parser&lt;/span&gt;, XML_OPTION_CASE_FOLDING, &lt;span style="color: red"&gt;0&lt;/span&gt;);
    xml_parse_into_struct(&lt;span style="color: #600"&gt;$parser&lt;/span&gt;, &lt;span style="color: #600"&gt;$string&lt;/span&gt;, &lt;span style="color: #600"&gt;$vals&lt;/span&gt;, &lt;span style="color: #600"&gt;$index&lt;/span&gt;);
    xml_parser_free(&lt;span style="color: #600"&gt;$parser&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$mnary&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
    &lt;span style="color: #600"&gt;$ary&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$mnary&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$vals&lt;/span&gt; &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$r&lt;/span&gt;) {
        &lt;span style="color: #600"&gt;$t&lt;/span&gt;=&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;tag&amp;#039;&lt;/span&gt;];
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;type&amp;#039;&lt;/span&gt;]==&lt;span style="color: green"&gt;&amp;#039;open&amp;#039;&lt;/span&gt;) {
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;])) {
                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][&lt;span style="color: red"&gt;0&lt;/span&gt;])) &lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][]=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(); &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;]=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;], &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;());
                &lt;span style="color: #600"&gt;$cv&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][count(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;])-&lt;span style="color: red"&gt;1&lt;/span&gt;];
            } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #600"&gt;$cv&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;];
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;attributes&amp;#039;&lt;/span&gt;])) {&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;attributes&amp;#039;&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$k&lt;/span&gt;=&amp;gt;&lt;span style="color: #600"&gt;$v&lt;/span&gt;) &lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_a&amp;#039;&lt;/span&gt;][&lt;span style="color: #600"&gt;$k&lt;/span&gt;]=&lt;span style="color: #600"&gt;$v&lt;/span&gt;;}
            &lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_c&amp;#039;&lt;/span&gt;]=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
            &lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_c&amp;#039;&lt;/span&gt;][&lt;span style="color: green"&gt;&amp;#039;_p&amp;#039;&lt;/span&gt;]=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;;
            &lt;span style="color: #600"&gt;$ary&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_c&amp;#039;&lt;/span&gt;];
        } &lt;span style="color: #0000ff"&gt;elseif&lt;/span&gt; (&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;type&amp;#039;&lt;/span&gt;]==&lt;span style="color: green"&gt;&amp;#039;complete&amp;#039;&lt;/span&gt;) {
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;])) { &lt;span style="color: #808080"&gt;// same as open&lt;/span&gt;
                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][&lt;span style="color: red"&gt;0&lt;/span&gt;])) &lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][]=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(); &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;]=&lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;], &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;());
                &lt;span style="color: #600"&gt;$cv&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;][count(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;])-&lt;span style="color: red"&gt;1&lt;/span&gt;];
            } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #600"&gt;$cv&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$t&lt;/span&gt;];
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;attributes&amp;#039;&lt;/span&gt;])) {&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;attributes&amp;#039;&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$k&lt;/span&gt;=&amp;gt;&lt;span style="color: #600"&gt;$v&lt;/span&gt;) &lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_a&amp;#039;&lt;/span&gt;][&lt;span style="color: #600"&gt;$k&lt;/span&gt;]=&lt;span style="color: #600"&gt;$v&lt;/span&gt;;}
            
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;value&amp;#039;&lt;/span&gt;])) &lt;span style="color: #600"&gt;$cv&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_v&amp;#039;&lt;/span&gt;] = &lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;value&amp;#039;&lt;/span&gt;];
        } &lt;span style="color: #0000ff"&gt;elseif&lt;/span&gt; (&lt;span style="color: #600"&gt;$r&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;type&amp;#039;&lt;/span&gt;]==&lt;span style="color: green"&gt;&amp;#039;close&amp;#039;&lt;/span&gt;) {
            &lt;span style="color: #600"&gt;$ary&lt;/span&gt;=&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;_p&amp;#039;&lt;/span&gt;];
        }
    }    
    
    _del_p(&lt;span style="color: #600"&gt;$mnary&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$mnary&lt;/span&gt;;
}
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; _del_p(&amp;amp;&lt;span style="color: #600"&gt;$ary&lt;/span&gt;) {
    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #600"&gt;$ary&lt;/span&gt; &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #600"&gt;$k&lt;/span&gt;=&amp;gt;&lt;span style="color: #600"&gt;$v&lt;/span&gt;) {
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #600"&gt;$k&lt;/span&gt;===&lt;span style="color: green"&gt;&amp;#039;_p&amp;#039;&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;unset&lt;/span&gt;(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$k&lt;/span&gt;]);
        &lt;span style="color: #0000ff"&gt;elseif&lt;/span&gt; (is_array(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$k&lt;/span&gt;])) _del_p(&lt;span style="color: #600"&gt;$ary&lt;/span&gt;[&lt;span style="color: #600"&gt;$k&lt;/span&gt;]);
    }
}&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Скопипастил с &lt;a href="http://deer.org.ua/~2/"&gt;себе подобного блога&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1190027538455603700?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1190027538455603700/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/xml2array-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1190027538455603700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1190027538455603700'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/xml2array-php.html' title='Лучшая функция xml2array php'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-9122956536071240738</id><published>2010-12-13T23:27:00.000-08:00</published><updated>2010-12-13T23:29:34.788-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='тэги'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Функция закрытия незакрытых тегов в HTML</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #808080"&gt;/**
 * close all open xhtml tags at the end of the string
 *
 * &lt;b style="text-decoration: underline;"&gt;@param&lt;/b&gt; string $html
 * &lt;b style="text-decoration: underline;"&gt;@return&lt;/b&gt; string
 * &lt;b style="text-decoration: underline;"&gt;@author&lt;/b&gt; Milian Wolff &amp;lt;mail&lt;b style="text-decoration: underline;"&gt;@milianw&lt;/b&gt;.de&amp;gt;
 */&lt;/span&gt;
 
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; closetags(&lt;span style="color: #600"&gt;$html&lt;/span&gt;) {
    &lt;span style="color: #808080"&gt;#put all opened tags into an array&lt;/span&gt;
    preg_match_all(&lt;span style="color: green"&gt;&amp;#039;#&amp;lt;([a-z]+)(?: .*)?(?&amp;lt;![/|/ ])&amp;gt;#iU&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$html&lt;/span&gt;, &lt;span style="color: #600"&gt;$result&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$openedtags&lt;/span&gt; = &lt;span style="color: #600"&gt;$result&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;];
    
    &lt;span style="color: #808080"&gt;#put all closed tags into an array&lt;/span&gt;
    preg_match_all(&lt;span style="color: green"&gt;&amp;#039;#&amp;lt;/([a-z]+)&amp;gt;#iU&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$html&lt;/span&gt;, &lt;span style="color: #600"&gt;$result&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$closedtags&lt;/span&gt; = &lt;span style="color: #600"&gt;$result&lt;/span&gt;[&lt;span style="color: red"&gt;1&lt;/span&gt;];
    &lt;span style="color: #600"&gt;$len_opened&lt;/span&gt; = count(&lt;span style="color: #600"&gt;$openedtags&lt;/span&gt;);
    
    &lt;span style="color: #808080"&gt;# all tags are closed&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (count(&lt;span style="color: #600"&gt;$closedtags&lt;/span&gt;) == &lt;span style="color: #600"&gt;$len_opened&lt;/span&gt;) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$html&lt;/span&gt;;
    }
    &lt;span style="color: #600"&gt;$openedtags&lt;/span&gt; = array_reverse(&lt;span style="color: #600"&gt;$openedtags&lt;/span&gt;);
    
    &lt;span style="color: #808080"&gt;# close tags&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #600"&gt;$i&lt;/span&gt;=&lt;span style="color: red"&gt;0&lt;/span&gt;; &lt;span style="color: #600"&gt;$i&lt;/span&gt; &amp;lt; &lt;span style="color: #600"&gt;$len_opened&lt;/span&gt;; &lt;span style="color: #600"&gt;$i&lt;/span&gt;++) {
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!in_array(&lt;span style="color: #600"&gt;$openedtags&lt;/span&gt;[&lt;span style="color: #600"&gt;$i&lt;/span&gt;], &lt;span style="color: #600"&gt;$closedtags&lt;/span&gt;)){
            &lt;span style="color: #600"&gt;$html&lt;/span&gt; .= &lt;span style="color: green"&gt;&amp;#039;&amp;lt;/&amp;#039;&lt;/span&gt;.&lt;span style="color: #600"&gt;$openedtags&lt;/span&gt;[&lt;span style="color: #600"&gt;$i&lt;/span&gt;].&lt;span style="color: green"&gt;&amp;#039;&amp;gt;&amp;#039;&lt;/span&gt;;
        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
            &lt;span style="color: #0000ff"&gt;unset&lt;/span&gt;(&lt;span style="color: #600"&gt;$closedtags&lt;/span&gt;[array_search(&lt;span style="color: #600"&gt;$openedtags&lt;/span&gt;[&lt;span style="color: #600"&gt;$i&lt;/span&gt;], &lt;span style="color: #600"&gt;$closedtags&lt;/span&gt;)]);
        }
    }
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$html&lt;/span&gt;;
}&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-9122956536071240738?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/9122956536071240738/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/php_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/9122956536071240738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/9122956536071240738'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/php_13.html' title='Функция закрытия незакрытых тегов в HTML'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-229797721244998366</id><published>2010-12-13T11:54:00.000-08:00</published><updated>2010-12-13T12:02:45.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='дебаг'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='профайлер'/><title type='text'>imTimer профайлер для PHP</title><content type='html'>Когда то он находился на блоге imbolc, которого уже давно нет. Вот поэтому blogspot рулит. Думаю блоги эти будут жить пока есть Google :)

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; imTimer(&lt;span style="color: #600"&gt;$name&lt;/span&gt;= &lt;span style="color: green"&gt;&amp;#039;default&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$mode&lt;/span&gt;= &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;){
    &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #600"&gt;$timers&lt;/span&gt;= &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
    &lt;span style="color: #600"&gt;$now&lt;/span&gt;=microtime(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(!&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$timers&lt;/span&gt;[&lt;span style="color: #600"&gt;$name&lt;/span&gt;])){
        &lt;span style="color: #600"&gt;$timers&lt;/span&gt;[&lt;span style="color: #600"&gt;$name&lt;/span&gt;]= &lt;span style="color: #600"&gt;$now&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: red"&gt;0&lt;/span&gt;;
    }
    &lt;span style="color: #600"&gt;$ret&lt;/span&gt;= &lt;span style="color: #600"&gt;$now&lt;/span&gt; - &lt;span style="color: #600"&gt;$timers&lt;/span&gt;[&lt;span style="color: #600"&gt;$name&lt;/span&gt;];
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(&lt;span style="color: #600"&gt;$mode&lt;/span&gt; == &lt;span style="color: green"&gt;&amp;#039;reset&amp;#039;&lt;/span&gt;)
        &lt;span style="color: #600"&gt;$timers&lt;/span&gt;[&lt;span style="color: #600"&gt;$name&lt;/span&gt;]= &lt;span style="color: #600"&gt;$now&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; round(&lt;span style="color: #600"&gt;$ret&lt;/span&gt;, &lt;span style="color: red"&gt;5&lt;/span&gt;);
}

&lt;span style="color: #808080"&gt;// пример использования&lt;/span&gt;

&lt;span style="color: #808080"&gt;// запускаем&lt;/span&gt;
imTimer();

... &lt;span style="color: #808080"&gt;// здесь типа много кода&lt;/span&gt;

imTimer(&lt;span style="color: green"&gt;&amp;#039;temp&amp;#039;&lt;/span&gt;);

&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; temp() {
... &lt;span style="color: #808080"&gt;// кучка говнокода&lt;/span&gt;
}
&lt;span style="color: #808080"&gt;// выводим время выполнения функции temp&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; imTimer(&lt;span style="color: green"&gt;&amp;#039;temp&amp;#039;&lt;/span&gt;);

... &lt;span style="color: #808080"&gt;// еще код&lt;/span&gt;

&lt;span style="color: #808080"&gt;// выводим время выполнения всего скрипта&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; imTimer();&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-229797721244998366?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/229797721244998366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/imtimer-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/229797721244998366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/229797721244998366'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/imtimer-php.html' title='imTimer профайлер для PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-6783567276706454561</id><published>2010-12-13T05:54:00.000-08:00</published><updated>2010-12-13T06:03:31.512-08:00</updated><title type='text'>Notice, Warning логирование ошибок PHP</title><content type='html'>Как-же отключить эти варнинги, нотисы, чтоб работа скрипта php не ломала дизайн сайта и при этом, сохраняя возможность, давать разработчику отзывы. Это просто, хотя многие не знают как. Если у вас свой сервер, настройте php.ini по примеру моих настроек:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;; Показывать все ошибки, включая нотисы, варнинги
&lt;span style="color: #003388"&gt;error_reporting&lt;/span&gt; = &lt;span style="color: #003388"&gt;E_ALL&lt;/span&gt; | &lt;span style="color: #003388"&gt;E_STRICT&lt;/span&gt;

; Не показывать ошибки
&lt;span style="color: #003388"&gt;display_errors&lt;/span&gt; = &lt;span style="color: #003388"&gt;Off&lt;/span&gt;

; Отключить вывод ошибок при старте выполнения &lt;span style="color: #003388"&gt;php&lt;/span&gt;, ошибки при выполнении на клиенте.
&lt;span style="color: #003388"&gt;display_startup_errors&lt;/span&gt; = &lt;span style="color: #003388"&gt;Off&lt;/span&gt;

; Записывать ошибки в логи
&lt;span style="color: #003388"&gt;log_errors&lt;/span&gt; = &lt;span style="color: #0066dd"&gt;On&lt;/span&gt;

; размер файла ошибок
&lt;span style="color: #003388"&gt;log_errors_max_len&lt;/span&gt; = &lt;span style="color: red"&gt;1024&lt;/span&gt;

; Не записывать повторяющиеся ошибки
&lt;span style="color: #003388"&gt;ignore_repeated_errors&lt;/span&gt; = &lt;span style="color: #0066dd"&gt;On&lt;/span&gt;

; Это повторные ошибки, которые впрочем можно и включить, теперь они нам не страшны (&lt;span style="color: #003388"&gt;Off&lt;/span&gt;)
&lt;span style="color: #003388"&gt;ignore_repeated_source&lt;/span&gt; = &lt;span style="color: #0066dd"&gt;On&lt;/span&gt;

; Логгировать утечки памяти
&lt;span style="color: #003388"&gt;report_memleaks&lt;/span&gt; = &lt;span style="color: #0066dd"&gt;On&lt;/span&gt;

; Трассировка ошибок (дебагинг). Это больше полезно разработчикам &lt;span style="color: #003388"&gt;php&lt;/span&gt; систем вроде &lt;span style="color: #003388"&gt;cms&lt;/span&gt;
&lt;span style="color: #003388"&gt;track_errors&lt;/span&gt; = &lt;span style="color: #003388"&gt;Off&lt;/span&gt;

; Формат вывода ошибок в виде &lt;span style="color: #003388"&gt;html&lt;/span&gt;. Нам ссылки не нужны, мы пишем в текстовый файл
&lt;span style="color: #003388"&gt;html_errors&lt;/span&gt; = &lt;span style="color: #003388"&gt;Off&lt;/span&gt;

; Путь к файлу ошибок.
&lt;span style="color: #003388"&gt;error_log&lt;/span&gt; =  &lt;span style="color: green"&gt;&amp;quot;\apache\logs\php_error.log&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

.htaccess если у вас хостинг и нет доступа к php.ini &lt;br&gt;&lt;br&gt;

В php скрипте включить выключить можно так:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;ini_set(&lt;span style="color: green"&gt;&amp;quot;display_errors&amp;quot;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;);
error_reporting(E_ALL);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-6783567276706454561?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/6783567276706454561/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/notice-warning-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6783567276706454561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6783567276706454561'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/notice-warning-php.html' title='Notice, Warning логирование ошибок PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5810362720194489593</id><published>2010-12-09T00:58:00.000-08:00</published><updated>2010-12-09T02:04:37.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='авторизация'/><category scheme='http://www.blogger.com/atom/ns#' term='Auth'/><title type='text'>Авторизация PHP</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #808080"&gt;// если пользователь не авторизован&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$_SESSION&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;user_id&amp;#039;&lt;/span&gt;])) {
    &lt;span style="color: #808080"&gt;// то проверяем его куки&lt;/span&gt;
    &lt;span style="color: #808080"&gt;// вдруг там есть логин и пароль к нашему скрипту&lt;/span&gt;
 
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$_COOKIE&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;login&amp;#039;&lt;/span&gt;]) &amp;amp;&amp;amp; &lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$_COOKIE&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;password&amp;#039;&lt;/span&gt;])) {
        &lt;span style="color: #808080"&gt;// если же такие имеются&lt;/span&gt;
        &lt;span style="color: #808080"&gt;// то пробуем авторизовать пользователя по этим логину и паролю&lt;/span&gt;
        &lt;span style="color: #600"&gt;$login&lt;/span&gt; = mysql_real_escape_string(&lt;span style="color: #600"&gt;$_COOKIE&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;login&amp;#039;&lt;/span&gt;]);
        &lt;span style="color: #600"&gt;$password&lt;/span&gt; = mysql_real_escape_string(&lt;span style="color: #600"&gt;$_COOKIE&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;password&amp;#039;&lt;/span&gt;]);
 
        &lt;span style="color: #808080"&gt;// и по аналогии с авторизацией через форму:&lt;/span&gt;
 
        &lt;span style="color: #808080"&gt;// делаем запрос к БД&lt;/span&gt;
        &lt;span style="color: #808080"&gt;// и ищем юзера с таким логином и паролем&lt;/span&gt;
 
        &lt;span style="color: #600"&gt;$query&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;quot;SELECT `id`
                FROM `users`
                WHERE `login`=&amp;#039;{&lt;span style="color: #600"&gt;$login&lt;/span&gt;}&amp;#039; AND `password`=&amp;#039;{&lt;span style="color: #600"&gt;$password&lt;/span&gt;}&amp;#039;
                LIMIT 1&amp;quot;&lt;/span&gt;;
        &lt;span style="color: #600"&gt;$sql&lt;/span&gt; = mysql_query(&lt;span style="color: #600"&gt;$query&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;or&lt;/span&gt; &lt;span style="color: #0000ff"&gt;die&lt;/span&gt;(mysql_error());
 
        &lt;span style="color: #808080"&gt;// если такой пользователь нашелся&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (mysql_num_rows(&lt;span style="color: #600"&gt;$sql&lt;/span&gt;) == &lt;span style="color: red"&gt;1&lt;/span&gt;) {
            &lt;span style="color: #808080"&gt;// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)&lt;/span&gt;
 
            &lt;span style="color: #600"&gt;$row&lt;/span&gt; = mysql_fetch_assoc(&lt;span style="color: #600"&gt;$sql&lt;/span&gt;);
            &lt;span style="color: #600"&gt;$_SESSION&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;user_id&amp;#039;&lt;/span&gt;] = &lt;span style="color: #600"&gt;$row&lt;/span&gt;[&lt;span style="color: green"&gt;&amp;#039;id&amp;#039;&lt;/span&gt;];
 
            &lt;span style="color: #808080"&gt;// не забываем, что для работы с сессионными данными,&lt;/span&gt;
            &lt;span style="color: #808080"&gt;// у нас в каждом скрипте должно присутствовать session_start();&lt;/span&gt;
        }
        &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
            &lt;span style="color: #808080"&gt;// только мы не будем давай ссылку на форму авторизации&lt;/span&gt;
            &lt;span style="color: #808080"&gt;// вдруг человек и не хочет был авторизованым&lt;/span&gt;
            &lt;span style="color: #808080"&gt;// а пришел просто поглядеть на наши страницы как гость&lt;/span&gt;
        }
    }
}&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5810362720194489593?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5810362720194489593/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5810362720194489593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5810362720194489593'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/php.html' title='Авторизация PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-6560648320864898610</id><published>2010-12-09T00:18:00.000-08:00</published><updated>2010-12-09T00:32:20.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>jQuery - как получить value radio элемента</title><content type='html'>&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #808080"&gt;// ========= 1 вариант ==========&lt;/span&gt;
Cтрана: &amp;lt;br /&amp;gt;
&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;country&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;Russia&amp;quot;&lt;/span&gt; checked=&lt;span style="color: green"&gt;&amp;quot;checked&amp;quot;&lt;/span&gt;&amp;gt;Россия &amp;lt;br /&amp;gt;
&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;country&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;Other&amp;quot;&lt;/span&gt;&amp;gt;Другая

...

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; the_value = $(&lt;span style="color: green"&gt;&amp;quot;:radio[name=country]&amp;quot;&lt;/span&gt;).filter(&lt;span style="color: green"&gt;&amp;quot;:checked&amp;quot;&lt;/span&gt;);

&lt;span style="color: #808080"&gt;// ========= 2 вариант ==========&lt;/span&gt;
&amp;lt;form id=&lt;span style="color: green"&gt;&amp;quot;radio_form&amp;quot;&lt;/span&gt;&amp;gt;
  &amp;lt;fieldset&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;color&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;red&amp;quot;&lt;/span&gt; checked=&lt;span style="color: green"&gt;&amp;quot;checked&amp;quot;&lt;/span&gt; /&amp;gt;Red&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;color&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;yellow&amp;quot;&lt;/span&gt; /&amp;gt;Yellow&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;    
    &amp;lt;label&amp;gt;&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;color&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;blue&amp;quot;&lt;/span&gt; /&amp;gt;Blue&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=&lt;span style="color: green"&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; name=&lt;span style="color: green"&gt;&amp;quot;color&amp;quot;&lt;/span&gt; value=&lt;span style="color: green"&gt;&amp;quot;purple&amp;quot;&lt;/span&gt; /&amp;gt;Purple&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
  &amp;lt;/fieldset&amp;gt;
&amp;lt;/form&amp;gt;

...

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; the_value = $(&lt;span style="color: green"&gt;&amp;#039;#radio_form input:radio:checked&amp;#039;&lt;/span&gt;).val();
&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-6560648320864898610?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/6560648320864898610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/jquery-value-radio.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6560648320864898610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6560648320864898610'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/jquery-value-radio.html' title='jQuery - как получить value radio элемента'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-6152325516146023305</id><published>2010-12-08T01:08:00.000-08:00</published><updated>2010-12-08T01:09:28.084-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='денвер'/><title type='text'>Как удалить денвер</title><content type='html'>Как деинсталлировать Денвер?&lt;br&gt;
Комплекс полностью автономен и останется таковым. Поэтому для легальной деинсталляции Денвера достаточно просто удалить директорию, в которую вы его установили (По умолчанию –C:\WebServers ). При желании можете также стереть ярлыки с Рабочего стола и из Автозагрузки (если забудете, система сама об этом напомнит при следующей загрузке).&lt;br&gt;&lt;br&gt;
Если вы перед удалением Денвера не завершили его работу корректно (перезагрузившись или ярлыком остановки), то, вероятно, Вам придется вручную «почистить» файлС:\WINDOWS\system32\drivers\etc\hosts (в Windows NT/2000/XP/2003) или C:\WINDOWS\hosts (в WIndows 9x или Me), чтобы адреса [Не проверен] и test2.ru перестали вести на локальную машину, а «смотрели» в Интернет.&lt;br&gt;&lt;br&gt;
Таким образом, для деинсталляции Денвера достаточен следующий порядок действий:&lt;br&gt;
1. Остановите Денвер
2. Если виртуальный диск создаётся по умолчанию, в Start -&gt; Run нужно выполнить следующую команду (если необходимо, замените Z на Вашу букву виртуального диска):
subst Z: /D
3. Удалите папку инсталляции Денвера (по умолчанию C:\WebServers)
4. Удалите, если необходимо, ярлык из Автозагрузки
5. Удалите ярлыки Запуска/Останова Комплекса&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-6152325516146023305?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/6152325516146023305/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6152325516146023305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6152325516146023305'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/12/blog-post.html' title='Как удалить денвер'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-7694019576802240288</id><published>2010-11-11T02:55:00.000-08:00</published><updated>2010-11-11T03:08:43.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Горячие клавиши'/><category scheme='http://www.blogger.com/atom/ns#' term='hotkeys'/><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Netbeans Горячие клавиши</title><content type='html'>&lt;p&gt;Я работаю с IDE Netbeans и Notepad++&lt;br&gt;&lt;br&gt;маст хэв - горячие клавиши для Netbeans&lt;br&gt;&lt;br&gt;   * Поиск и замена&lt;br&gt;&lt;br&gt;Ctrl+F3 - Поиск слова, находящегося у курсора&lt;br&gt;F3/Shift+F3 - Поиск слудующего/предыдущего вхождения слова в файле&lt;br&gt;Ctrl+F/H - Поиск/Замена в файле&lt;br&gt;Alt+F7 - Поиск использований&lt;br&gt;Ctrl+Shift+F/H - Поиск/замена в проектах&lt;br&gt;Alt+Shift+U - Поиск результатов использования&lt;br&gt;Alt+Shift+H - Отключить подсветку результата поиска&lt;br&gt;Ctrl+R - Переименовать&lt;br&gt;Ctrl+U, then U - Конвертация выделенного текста в верхний регистр&lt;br&gt;Ctrl+U, then L - Конвертация выделенного текста в нижний регистр&lt;br&gt;Ctrl+U, then S - Инверсия регистра букв выделенного текста&lt;br&gt;Ctrl+Shift+V - Вставка отформатированного текста&lt;br&gt;Ctrl+I - Перейти в поле "Быстрый Поиск"&lt;br&gt;&lt;br&gt;   * Навигация по исходному коду&lt;br&gt;&lt;br&gt;Ctrl+O/Alt+Shift+O - Перейти к типу/файлу&lt;br&gt;Ctrl+Shift+T - Перейти к JUnit тесту&lt;br&gt;Alt+O - Перейти к источнику&lt;br&gt;Ctrl+B - Перейти к объявлению переменной&lt;br&gt;Ctrl+G - Перейти к строке, задав ее номер&lt;br&gt;Ctrl+Shift+M - Добавить/Удалить заметку&lt;br&gt;Ctrl+Shift+Period/Comma - Следующая/Предыдущая заметка&lt;br&gt;Ctrl+Period/Comma - Следующая/Предыдущая использование/ошибка компиляции&lt;br&gt;Ctrl+Shift+1/2/3 - Выделить в проектах/файлах/фаворитах&lt;br&gt;Ctrl+[ - Переместить курсор к открывающейся/закрывающейся скобке от соответствующей закрывающейся/открывающейся скобки&lt;br&gt;Ctrl+K/Ctrl+Shift K -  Следующее/предыдущее совпадение слова&lt;br&gt;Alt+Left/Alt+Right/Ctrl+Q - Перейти к предыдущему/следующему/последнему редактированию&lt;br&gt;Alt+Up/Down - Следующее/предыдущее встречаемость данной переменной&lt;br&gt;&lt;br&gt;   * Программирование на языке Java&lt;br&gt;&lt;br&gt;Alt+Insert - Сгенерировать код&lt;br&gt;Ctrl+Shift+I - Исправить все импорты класса&lt;br&gt;Alt+Shift+I - Исправить выделенный импорт класса&lt;br&gt;Alt+Shift+F - Отформатировать текст согласно кодинг-стайлу&lt;br&gt;Alt+Shift+Left/Right/Up/Down - Переместить строку влево/вправо/вверх/вниз на одну табуляцию&lt;br&gt;Ctrl+Shift+Up/Down - Скопировать и вставить текущую строку выше/ниже&lt;br&gt;Ctrl/Alt+F12 - Просмотр членов класса/всей иерархии класса&lt;br&gt;Ctrl+/ - Закомментировать/Раскомментировать текущую строку&lt;br&gt;Ctrl+E - Удалить текущую строку&lt;br&gt;&lt;br&gt;При написании кода очень удобно использовать сокращения&lt;br&gt;часто повторяемых участков кода. Схема использования:&lt;br&gt;сокращение+Tab&lt;br&gt;&lt;br&gt;   * Сокращения для Java редактора&lt;br&gt;&lt;br&gt;En - Enumeration&lt;br&gt;Ex - Exception&lt;br&gt;Ob - Object&lt;br&gt;Psf - public static final&lt;br&gt;Psfb - public static final boolean&lt;br&gt;Psfi - public static final int&lt;br&gt;Psfs - public static final String&lt;br&gt;St - String&lt;br&gt;ab - abstract&lt;br&gt;bo - boolean&lt;br&gt;br - break&lt;br&gt;ca - catch (&lt;br&gt;cl - class&lt;br&gt;cn - continue&lt;br&gt;df - default:&lt;br&gt;dowhile - do {} while (condition);&lt;br&gt;eq - equals&lt;br&gt;ex - extends&lt;br&gt;fa - false&lt;br&gt;fi - final&lt;br&gt;fl - float&lt;br&gt;forc - for (Iterator it = collection.iterator(); it.hasNext();) {Object elem = (Object) it.next();}&lt;br&gt;fore - for (Object elem : iterable) {}&lt;br&gt;fori - for (int i = 0; i &amp;lt; arr.length; i++) {}&lt;br&gt;fy - finally&lt;br&gt;ie - interface&lt;br&gt;ifelse - if (condition){}else {}&lt;br&gt;im - implements&lt;br&gt;iof - instanceof&lt;br&gt;ir - import&lt;br&gt;le - length&lt;br&gt;newo - Object name = new Object(args);&lt;br&gt;pe - protected&lt;br&gt;pr - private&lt;br&gt;psf - private static final&lt;br&gt;psfb - private static final boolean&lt;br&gt;psfi - private static final int&lt;br&gt;psfs - private static final String&lt;br&gt;pst - printStackTrace();&lt;br&gt;psvm - public static void main(String[] args){}&lt;br&gt;pu - public&lt;br&gt;re - return&lt;br&gt;serr - System.err.println ("|");&lt;br&gt;sout - System.out.println ("|");&lt;br&gt;st - static&lt;br&gt;sw - switch (&lt;br&gt;sy - synchronized&lt;br&gt;tds - Thread.dumpStack();&lt;br&gt;th - throws&lt;br&gt;trycatch - try {} catch (Exception e) {}&lt;br&gt;tw - throw&lt;br&gt;twn - throw new&lt;br&gt;wh - while (&lt;br&gt;whileit - while (it.hasNext()) {Object elem = (Object) it.next();}&lt;br&gt;&lt;br&gt;&lt;a href="http://www.fayloobmennik.net/195975"&gt;Подсветка кода для Netbeans как в Notepad++&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-7694019576802240288?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/7694019576802240288/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/11/netbeans.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7694019576802240288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7694019576802240288'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/11/netbeans.html' title='Netbeans Горячие клавиши'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1708746148905696819</id><published>2010-11-09T02:59:00.000-08:00</published><updated>2010-11-09T03:06:17.031-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='дебаг'/><title type='text'>Дебагинг в PHP</title><content type='html'>Есить куча вариантов дебага.
&lt;br&gt;&lt;br&gt;
Самый простой
&lt;br&gt;
&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;print_r(&lt;span style="color: #600"&gt;$foo&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Получше:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;lt;pre&amp;gt;&amp;#039;&lt;/span&gt;;
print_r(&lt;span style="color: #600"&gt;$foo&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;

Я использую такую функцию:

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; deb(&lt;span style="color: #600"&gt;$str&lt;/span&gt;, &lt;span style="color: #600"&gt;$name&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;) {
    &lt;span style="color: #600"&gt;$name&lt;/span&gt; = (&lt;span style="color: #600"&gt;$name&lt;/span&gt;)?&lt;span style="color: #600"&gt;$name&lt;/span&gt;:gettype(&lt;span style="color: #600"&gt;$str&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$aCol&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;(&lt;span style="color: green"&gt;&amp;#039;#FFF082&amp;#039;&lt;/span&gt;,&lt;span style="color: green"&gt;&amp;#039;#BAFF81&amp;#039;&lt;/span&gt;,&lt;span style="color: green"&gt;&amp;#039;#BAFFD7&amp;#039;&lt;/span&gt;,&lt;span style="color: green"&gt;&amp;#039;#F0D9D7&amp;#039;&lt;/span&gt;);
    &lt;span style="color: #600"&gt;$color&lt;/span&gt; = &lt;span style="color: #600"&gt;$aCol&lt;/span&gt;[RAND(&lt;span style="color: red"&gt;0&lt;/span&gt;,&lt;span style="color: red"&gt;3&lt;/span&gt;)];
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;quot;&amp;lt;PRE&amp;gt;&amp;lt;div style=&amp;#039;background-color: &lt;span style="color: #600"&gt;$color&lt;/span&gt;&amp;#039;&amp;gt;&amp;lt;b&amp;gt;&lt;span style="color: #600"&gt;$name&lt;/span&gt; = &amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (is_array(&lt;span style="color: #600"&gt;$str&lt;/span&gt;)) &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;lt;br&amp;gt;&amp;#039;&lt;/span&gt;;
    print_r(&lt;span style="color: #600"&gt;$str&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;echo&lt;/span&gt; &lt;span style="color: green"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;lt;/PRE&amp;gt;&amp;lt;br&amp;gt;&amp;quot;&lt;/span&gt;;
}

&lt;span style="color: #808080"&gt;// Пример использования&lt;/span&gt;

deb(&lt;span style="color: #600"&gt;$foo&lt;/span&gt;);

&lt;span style="color: #808080"&gt;// или&lt;/span&gt;

deb(&lt;span style="color: #600"&gt;$foo&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;foo&amp;#039;&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1708746148905696819?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1708746148905696819/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/11/php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1708746148905696819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1708746148905696819'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/11/php.html' title='Дебагинг в PHP'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5615312008137909385</id><published>2010-08-18T06:34:00.000-07:00</published><updated>2010-08-18T06:38:09.314-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Парсинг'/><category scheme='http://www.blogger.com/atom/ns#' term='DOM'/><title type='text'>Парсинг HTML, DOM</title><content type='html'>Свое знакомство с php я начал именно с парсинга, в дальнейшем для облегчения я попробовал использовать &lt;a class="bb" href="http://sourceforge.net/projects/simplehtmldom/"&gt;Simple HTML DOM Parser&lt;/a&gt;. С ним работать очень удобно, но он жрет очень много памяти, и там где происходит много итераций с его участием скрипт завершает свою работу с Fatal error из за не хватки памяти.
&lt;br&gt;&amp;nbsp;&lt;br&gt;
Вообщем нашел я ему замену, регулярка которая парсит содержимое элемента по указному id или class-у.

&lt;table class="source-code" style="border: 1px #7f9db9 solid; font-size: 12px; background-color:#fffff5"&gt;
&lt;colgroup&gt;
 &lt;col width="10" /&gt;
&lt;/colgroup&gt;
&lt;tr&gt;&lt;td colspan="2" style="background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px"&gt;Код -&lt;span style="color: #050"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td style="text-align: left; vertical-align: top; color: #495884; padding: 4px 3px 4px 3px; background-color: #f0f0f0"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;
    &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: #222"&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ParsDom {

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #600"&gt;$sContent&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
    
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; getElement(&lt;span style="color: #600"&gt;$sId&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;, &lt;span style="color: #600"&gt;$sElem&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;#039;div&amp;#039;&lt;/span&gt;) {
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color: #600"&gt;$sId&lt;/span&gt; || !&lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;sContent) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
        &lt;span style="color: #600"&gt;$aOut&lt;/span&gt;[&lt;span style="color: red"&gt;0&lt;/span&gt;] = &lt;span style="color: #0000ff"&gt;array&lt;/span&gt;();
        &lt;span style="color: #600"&gt;$sReg&lt;/span&gt; = &lt;span style="color: green"&gt;&amp;quot;
        /
        &amp;lt;{&lt;span style="color: #600"&gt;$sElem&lt;/span&gt;}[^&amp;gt;]+\b(?:class|id)=[\&amp;quot;\&amp;#039;]?{&lt;span style="color: #600"&gt;$sId&lt;/span&gt;}[\&amp;quot;\&amp;#039;]?[^&amp;gt;]*&amp;gt;
         (?:
           (&amp;lt;{&lt;span style="color: #600"&gt;$sElem&lt;/span&gt;}[^&amp;gt;]*&amp;gt;*?&amp;lt;\/{&lt;span style="color: #600"&gt;$sElem&lt;/span&gt;}&amp;gt;)|
           .
         )*?
        &amp;lt;\/{&lt;span style="color: #600"&gt;$sElem&lt;/span&gt;}&amp;gt;
        /xsS&amp;quot;&lt;/span&gt;;

        preg_match_all(&lt;span style="color: #600"&gt;$sReg&lt;/span&gt;, &lt;span style="color: #600"&gt;$this&lt;/span&gt;-&amp;gt;sContent, &lt;span style="color: #600"&gt;$aOut&lt;/span&gt;);

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;isset&lt;/span&gt;(&lt;span style="color: #600"&gt;$aOut&lt;/span&gt;[&lt;span style="color: red"&gt;0&lt;/span&gt;]))
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #600"&gt;$aOut&lt;/span&gt;[&lt;span style="color: red"&gt;0&lt;/span&gt;];
        &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;    
            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: green"&gt;&amp;#039;&amp;#039;&lt;/span&gt;;
    }
}

&lt;span style="color: #808080"&gt;// Пример&lt;/span&gt;
&lt;span style="color: #600"&gt;$oParsDom&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ParsDom;

&lt;span style="color: #808080"&gt;// Контент от куда будем парсить&lt;/span&gt;
&lt;span style="color: #600"&gt;$oParsDom&lt;/span&gt;-&amp;gt;sContent = &lt;span style="color: #600"&gt;$sData&lt;/span&gt;;

&lt;span style="color: #808080"&gt;// Парсим все DIV элементы с указаным id или классом&lt;/span&gt;
&lt;span style="color: #600"&gt;$aDiv&lt;/span&gt; = &lt;span style="color: #600"&gt;$oParsDom&lt;/span&gt;-&amp;gt;getElement(&lt;span style="color: green"&gt;&amp;#039;class_or_id_name&amp;#039;&lt;/span&gt;);

&lt;span style="color: #808080"&gt;// Парсим все LI элементы с указаным id или классом&lt;/span&gt;
&lt;span style="color: #600"&gt;$aLi&lt;/span&gt; = &lt;span style="color: #600"&gt;$oParsDom&lt;/span&gt;-&amp;gt;getElement(&lt;span style="color: green"&gt;&amp;#039;menu&amp;#039;&lt;/span&gt;, &lt;span style="color: green"&gt;&amp;#039;li&amp;#039;&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5615312008137909385?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5615312008137909385/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/08/php-simple-html-dom-parser.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5615312008137909385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5615312008137909385'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/08/php-simple-html-dom-parser.html' title='Парсинг HTML, DOM'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-4997666409654585394</id><published>2010-08-07T05:12:00.001-07:00</published><updated>2010-08-07T05:27:00.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='жизнь'/><title type='text'>Жарко</title><content type='html'>Выходные. У нас жара, побиты все рекорды, температура за 40. Леса горят, вроде уже поменьше, т.к. меньше смога на улице.&lt;br&gt;
&lt;br&gt;
Вчера посмотрел фильм Мухина "Максимум лжи и глупости" про высадку американцев на Луне. Говорит логичные вещи, у них не было возможности туда доставить космонавтов и обратно, т.к. не было таких мощных двигателей и до сих пор нет. Также привезенные 300кг лунного грунта никому не дают на анализ, а кому давали, установили, что он с земли.&lt;br&gt;

&lt;OBJECT width="470" height="353"&gt;&lt;PARAM name="movie" value="http://video.rutube.ru/ea88210602e466fc2f263860fb403ce9"&gt;&lt;/PARAM&gt;&lt;PARAM name="wmode" value="window"&gt;&lt;/PARAM&gt;&lt;PARAM name="allowFullScreen" value="true"&gt;&lt;/PARAM&gt;&lt;EMBED src="http://video.rutube.ru/ea88210602e466fc2f263860fb403ce9" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" &gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;
&lt;br&gt;
Все парюсь с PHP. В который раз, переделываю механизм процессов, теперь на ООП. Все это трудно укладывается в голове, поэтому заюзал &lt;a href="http://www.mindmeister.com/ru/home"&gt;сервис "карт ума"&lt;/a&gt; и чего то там изобразив пытаюсь воплотить в коде, надеюсь получится и переписывать не придется.&lt;br&gt;
&lt;br&gt;
Жена с детьми отдыхают на волге, ездят с родителями на острова, купаются. Ну ничего, еще немного, у меня будет отпуск и я первый раз поеду с семьей на море в Анапу.&lt;br&gt;
&lt;br&gt;
Почему блоггер не сохраняет мое форматирование! Аргх... Приходится ручками раставлять теги br
&lt;br&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_orOEQgJ3hEM/TF1OFaZDHAI/AAAAAAAAAMw/N5Lyh9CKbaY/s1600/icecub.BMP"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_orOEQgJ3hEM/TF1OFaZDHAI/AAAAAAAAAMw/N5Lyh9CKbaY/s400/icecub.BMP" alt="" id="BLOGGER_PHOTO_ID_5502640174607309826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-4997666409654585394?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/4997666409654585394/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4997666409654585394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/4997666409654585394'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/08/blog-post.html' title='Жарко'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_orOEQgJ3hEM/TF1OFaZDHAI/AAAAAAAAAMw/N5Lyh9CKbaY/s72-c/icecub.BMP' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-1349595988736285018</id><published>2010-08-06T07:18:00.000-07:00</published><updated>2010-08-06T07:33:48.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='эксперименты'/><category scheme='http://www.blogger.com/atom/ns#' term='sape'/><title type='text'>Эксперимент с Sape 0</title><content type='html'>Прошло уже наверное пол года, после того как Яндекс забанил последние из моих ГС, которые, хоть и немного но приносили прибыль.&lt;br&gt;
&lt;br&gt;


Как то у меня к этому всему охладело. Но, &lt;a href="http://glebzhiglov.ru/?p=598#more-598"&gt;читая блоги&lt;/a&gt;, посматривая на topsape.ru захотелось попробовать...&lt;br&gt;
&lt;br&gt;


&lt;b&gt;Эксперимент&lt;/b&gt; будет такой:&lt;br&gt;

&lt;br&gt;

Использую:&lt;br&gt;

1. только фри домены 3-го уровня&lt;br&gt;

2. фрихостинги&lt;br&gt;

3. свои навыки php, делаю "кнопку бабло" о_О&lt;br&gt;

4. Zebrum Lite, Satellite-X&lt;br&gt;
&lt;br&gt;


Получаю профит!&lt;br&gt;&lt;br&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_orOEQgJ3hEM/TFwccdOX79I/AAAAAAAAAMo/ipNDMKAQJOI/s1600/money.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 266px;" src="http://3.bp.blogspot.com/_orOEQgJ3hEM/TFwccdOX79I/AAAAAAAAAMo/ipNDMKAQJOI/s400/money.jpg" alt="" id="BLOGGER_PHOTO_ID_5502304119946735570" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-1349595988736285018?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/1349595988736285018/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/08/sape-0.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1349595988736285018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/1349595988736285018'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/08/sape-0.html' title='Эксперимент с Sape 0'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_orOEQgJ3hEM/TFwccdOX79I/AAAAAAAAAMo/ipNDMKAQJOI/s72-c/money.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-2446518360957140079</id><published>2010-07-29T22:24:00.000-07:00</published><updated>2010-07-29T22:32:41.596-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Notepad++'/><title type='text'>Почему Notepad++ лучше IDE</title><content type='html'>1. Он гораздо быстрее любой IDE&lt;br&gt;
2. Подсветка синтаксиса, парных тегов, фигурных скобок &lt;span style="font-weight:bold;"&gt;лучшая&lt;/span&gt; из виденных мной&lt;br&gt;
3. Ctrl+B - скачем между фигурными скобками&lt;br&gt;
   Ctrl+D - дублируем строчку&lt;br&gt;
   Ctrl+Shift+ стрелки вверх, вниз - перемещаем строчки вверх, вниз&lt;br&gt;
&lt;br&gt;
Наиболее близок к &lt;a href="http://sourceforge.net/projects/notepad-plus/"&gt;&lt;span style="font-weight:bold;"&gt;Notepad++&lt;/span&gt;&lt;/a&gt; - &lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.jetbrains.com/phpstorm/"&gt;JetBrains PhpStorm&lt;/a&gt;&lt;/span&gt; но он платный и тормозной.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-2446518360957140079?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/2446518360957140079/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/07/notepad-ide.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/2446518360957140079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/2446518360957140079'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/07/notepad-ide.html' title='Почему Notepad++ лучше IDE'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5519164415085692669</id><published>2010-07-21T04:04:00.000-07:00</published><updated>2010-07-22T04:18:53.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><category scheme='http://www.blogger.com/atom/ns#' term='Yii'/><title type='text'>Выбор php фреймворка для проекта. Великолепный Yii</title><content type='html'>&lt;p&gt;Мое знакомство с фреймворками началось с &lt;span class=" transl_class" title="Click to correct" id="6"&gt;&lt;a style="font-weight: bold;" href="http://code-igniter.ru/"&gt;CodeIgniter&lt;/a&gt;. У него хорошая документация, есть сообщество&lt;/span&gt;, он до недавнего времени был самым быстрым (вроде бы). Но он уже давно не обновлялся и устарел.
&lt;/p&gt;
&lt;p&gt;
Я давно уже планирую реализовать небольшой проект. Что то типа соц. сети, но со своими плюшками. Ну и надумал использовать для этого фреймворк. Хочется сделать все по грамотному, как можно меньше говно кода и т.д. При создании чего либо, очень важна архитектура.
&lt;/p&gt;
&lt;p&gt;
Посмотрел &lt;a href="http://zend-framework.ru/"&gt;&lt;span style="font-weight: bold;"&gt;Zend Framework&lt;/span&gt;&lt;/a&gt;. Этот фреймворк достаточно мощный, и возможностей у него много. Мне не понравилось что он изначально интегрирован с Dojo с которым я не дружу. jQuery там опционально поддерживается, но уж очень много нужно плясок с бубном, чтобы все работало как надо. Мультиязычность тоже проблема.
&lt;/p&gt;
&lt;p&gt;
Попробовал &lt;a style="font-weight: bold;" href="http://www.yiiframework.com/doc/guide/ru/index"&gt;Yii&lt;/a&gt;. Первые впечатления: Я в восторге! Он сам генерирует код! Обалденно... наверное, это что то подобное ROR. Он сразу же дружит с jQuery.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5519164415085692669?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5519164415085692669/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/07/php-yii.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5519164415085692669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5519164415085692669'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/07/php-yii.html' title='Выбор php фреймворка для проекта. Великолепный Yii'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-7081320651428599997</id><published>2010-04-21T23:13:00.000-07:00</published><updated>2010-07-22T04:17:33.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>ISSET в java script</title><content type='html'>Жаль что нет такой нужной функции в JS. 1 раз мне помогло такое решение:
&lt;table class="source-code" style="border: 1px solid rgb(127, 157, 185); font-size: 12px; background-color: rgb(255, 255, 245);"&gt;&lt;colgroup&gt;&lt;/colgroup&gt;&lt;col width="10"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" style="background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px;"&gt;Код -&lt;span style="color: rgb(0, 85, 0);"&gt; пример #1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="text-align: left; vertical-align: top; color: rgb(73, 88, 132); padding: 4px 3px; background-color: rgb(240, 240, 240);"&gt;&lt;pre style="margin: 0px; line-height: 15px;"&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;
  &lt;td style="vertical-align: top; padding: 4px;"&gt;&lt;pre style="margin: 0px; line-height: 15px; color: rgb(34, 34, 34);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; foo = &lt;span style="color:red;"&gt;123&lt;/span&gt;;

&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (undefined !== window.foo)
{alert(&lt;span style="color:green;"&gt;'foo exist!'&lt;/span&gt;)}
&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;
{alert(&lt;span style="color:green;"&gt;'foo undefined!'&lt;/span&gt;)};&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Заодно протестировал этот код в &lt;span style="font-weight: bold;"&gt;онлайн сервисе по отладке Java Script&lt;/span&gt; &lt;a href="http://jsbin.com/ebumu/edit"&gt;http://jsbin.com/ebumu/edit&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-7081320651428599997?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/7081320651428599997/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/04/isset-java-script.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7081320651428599997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/7081320651428599997'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/04/isset-java-script.html' title='ISSET в java script'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-5223104749656894119</id><published>2010-01-18T00:16:00.000-08:00</published><updated>2010-06-08T07:11:36.477-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Браузеры'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Script'/><title type='text'>Определение браузера в JavaScript</title><content type='html'>Иногда бывает нужно определить браузер юзера на странице, нашел для этого такое решение:

&lt;blockquote&gt;var isIE = !!(window.attachEvent &amp;amp;&amp;amp; !window.opera);
var isOpera = !!window.opera;
var isWebKit = navigator.userAgent.indexOf('AppleWebKit/') &gt; -1;
var isKHTML = navigator.userAgent.indexOf('KHTML') != -1;
var isGecko = navigator.userAgent.indexOf('Gecko') &gt; -1 &amp;amp;&amp;amp; navigator.userAgent.indexOf('KHTML') == -1;
var isMobileSafari = !!navigator.userAgent.match(/Apple.*Mobile.*Safari/);
var isChrome = !!window.chrome;&lt;/blockquote&gt;

А потом там, где нужно осуществлять проверку на браузер, делаем так:

&lt;blockquote&gt;if (isIE) {
  alert("Internet Explorer! Make me unsee it...");
}&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-5223104749656894119?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/5223104749656894119/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/01/1-navigator.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5223104749656894119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/5223104749656894119'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/01/1-navigator.html' title='Определение браузера в JavaScript'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1048561980648134839.post-6114895439125125291</id><published>2010-01-05T07:33:00.000-08:00</published><updated>2010-01-05T08:57:01.910-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='фреймворк'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>Доки по CodeIgniter</title><content type='html'>&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://code-igniter.ru/"&gt;Русская документация по CodeIgniter&lt;/a&gt;&lt;/li&gt;   
 &lt;li&gt;&lt;a href="http://groups.google.com/group/codeigniter-ru"&gt;Русская группа на GoogleGroups&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://community.livejournal.com/ru_codeigniter/"&gt;Русское сообщество в ЖЖ&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://blog.termit.name/codeigniter/"&gt;Много полезных ссылок&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="http://erum.ru/tags/codeigniter-blog"&gt;Туториал по разработке подноценного блога на CI&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.codeigniter.com/"&gt;Сайт фреймворка&lt;/a&gt; (англ.)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.codeigniter.com/wiki/"&gt;Официальное wiki&lt;/a&gt; (англ.)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://codeigniter.com/forums/"&gt;Официальный форум&lt;/a&gt; (англ.), наверное, лучший источник информации, именно там зарождаются все дополнительные библиотеки и множественные форки&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://codeigniter.com/user_guide/"&gt;Документация&lt;/a&gt; (англ.), это один из самых крупных плюсов CodeIgniter'a, такую хорошую документацию редко где встретишь.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://codeigniter.com/tutorials/"&gt;Видео уроки&lt;/a&gt; + &lt;a href="http://codeigniter.com/tutorials/"&gt;&lt;/a&gt;&lt;a href="http://www.haughin.com/screencasts/"&gt;еще 6 скринкастов от ElliotHaugin&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;http://www.codeigniterdirectory.com/&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://codeigniter.com/user_guide/general/quick_reference.html"&gt;Шпаргалка (CheetSheet)&lt;/a&gt; (англ.), я распечатал и повесил на стену&amp;nbsp;— удобно&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://depositfiles.com/ru/files/3073872"&gt;Книга СodeIgniter for Rapid PHP Application Development&lt;/a&gt; (англ.)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://ifolder.ru/7857280"&gt;Книга Professional CodeIgniter&lt;/a&gt; (англ.)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://groups.google.com/group/codeigniter-ru?hl=ru"&gt;Русское сообщество CodeIgniter&lt;/a&gt;, к сожалению это пока единственный русскоязычный ресурс где можно получить помощь при работе с фреймворком&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.code-igniter.ru/"&gt;Перевод документации (переведено процентов 60)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://ru.wikibooks.org/wiki/CodeIgniter" class="zakl_title" rel="nofollow" target="_blank"&gt;CodeIgniter — Викиучебник&lt;/a&gt;&lt;span class="zakl_title"&gt;, &lt;/span&gt;также стоит обратить внимание на следующие два блога, где часто появляются заметки о «воспламеняющем» фреймворке (оба на русском):&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.simplecoding.org/category/code-igniter"&gt;simplecoding.org&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://mihailt.wordpress.com/category/frameworks/"&gt;mihailt.wordpress.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
+ На официальном сайте есть 2 видео, которые дают хорошее представление о фрейворке.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1048561980648134839-6114895439125125291?l=andipas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andipas.blogspot.com/feeds/6114895439125125291/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://andipas.blogspot.com/2010/01/codeigniter.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6114895439125125291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1048561980648134839/posts/default/6114895439125125291'/><link rel='alternate' type='text/html' href='http://andipas.blogspot.com/2010/01/codeigniter.html' title='Доки по CodeIgniter'/><author><name>Adi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
