<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fxposter&#039;s wave &#187; HTML</title>
	<atom:link href="http://blog.fxposter.org/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fxposter.org</link>
	<description>Stories about Ruby, JavaScript, Objective-C and other cool tools</description>
	<lastBuildDate>Sun, 30 Oct 2011 20:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DomDocument &#8211; кодировка в HTML-документах</title>
		<link>http://blog.fxposter.org/2008/07/20/domdocument-encoding-in-html/</link>
		<comments>http://blog.fxposter.org/2008/07/20/domdocument-encoding-in-html/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 16:53:32 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[DomDocument]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/?p=474</guid>
		<description><![CDATA[На этот пост меня сподвигла неправильная (на мой взгляд работа fillin-фильтра в Symfony). Итак, поехали. DOM - это мощный компонент PHP для работы с Document Object Model. Почитать о его возможностях можно здесь (php manual). Я же хочу заострить внимание на том, что это расширение, в отличии от SimpleXML, например, может работать как с HTML, [...]]]></description>
			<content:encoded><![CDATA[<p>На этот пост меня сподвигла неправильная (на мой взгляд работа fillin-фильтра в Symfony). Итак, поехали.</p>
<p>DOM - это мощный компонент PHP для работы с Document Object Model. Почитать о его возможностях можно <a href="http://ua.php.net/manual/en/book.dom.php">здесь</a> (php manual). Я же хочу заострить внимание на том, что это расширение, в отличии от SimpleXML, например, может работать как с HTML, так и с XML.</p>
<p>DomDocument - один из классов компонента DOM, который отвечает за полный XML или HTML-документ.</p>
<p>И вот хотелось бы поговорить и показать, как этот DomDocument работает с кодировками и символами, отличными от латиницы.</p>
<p style="padding-left: 30px;">Для начала - небольшое отступление: DomDocument я создаю вот так: <code class="php">new DomDocument('1.0', 'UTF-8')</code>, указывая в качестве кодировки (&#8221;The encoding of the document as part of the XML declaration.&#8221;) UTF-8, так как, судя по моему опыту - указание кодировки здесь не дает вообще ничего.</p>
<p>Рассказывать тут особо нечего, поэтому я приведу код и результаты, а потом их проанализирую.</p>
<p><em>Весь текст в скриптах в кодировке UTF-8.</em></p>
<h3>Код класса &#8220;тестов&#8221;</h3>
<pre><code class="php">class Test_DomDocument_HTML_Charset {
  protected $dom;

  protected $html =
        '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;
        &lt;html&gt;
        &lt;head&gt;
          &lt;meta http-equiv="Content-type" content="text/html; charset=UTF-8"&gt;
          &lt;title&gt;Тестовая страничка&lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;
          &lt;p&gt;Привет&lt;/p&gt;
        &lt;/body&gt;
        &lt;/html&gt;';

  protected $html_without_charset =
        '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;
        &lt;html&gt;
        &lt;head&gt;
          &lt;title&gt;Тестовая страничка&lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;
          &lt;p&gt;Привет&lt;/p&gt;
        &lt;/body&gt;
        &lt;/html&gt;';

  protected function checkTestFunction($function)
  {
    return (strpos($function, 'test') === 0);
  }

  public function execute($callback) {
    $functions = get_class_methods(get_class($this));
    $functions = array_filter($functions, array($this, 'checkTestFunction'));
    foreach($functions as $function) {
      $this-&gt;setUp();
      $result = $this-&gt;$function();
      $callback($result, $function);
      $this-&gt;tearDown();
    }
  }

  protected function setUp() {
    $this-&gt;dom = new DomDocument('1.0', 'UTF-8');
  }

  protected function tearDown() {
  }

  /**
   * Возвращает кодировку документа.
   * Используется документ, в котором не указана кодировка.
   *
   * @return string
   */
  protected function testWithoutCharset() {
    $this-&gt;dom-&gt;loadHTML($this-&gt;html_without_charset);
    return $this-&gt;dom-&gt;encoding;
  }

  /**
   * Возвращает документ, после обработки его DomDocument'ом.
   * Используется документ, в котором не указана кодировка.
   *
   * @return string
   */
  protected function testWithoutCharsetHtml() {
    $this-&gt;dom-&gt;loadHTML($this-&gt;html_without_charset);
    return $this-&gt;dom-&gt;saveHTML();
  }

  /**
   * Возвращает кодировку документа.
   * Используется документ, в котором указана кодировка.
   *
   * @return string
   */
  protected function testWithCharset() {
    $this-&gt;dom-&gt;loadHTML($this-&gt;html);
    return $this-&gt;dom-&gt;encoding;
  }

  /**
   * Возвращает документ, после обработки его DomDocument'ом.
   * Используется документ, в котором указана кодировка.
   *
   * @return string
   */
  protected function testWithCharsetHtml() {
    $this-&gt;dom-&gt;loadHTML($this-&gt;html);
    return $this-&gt;dom-&gt;saveHTML();
  }

}</code></pre>
<h3>Код, показывающий результаты</h3>
<pre><code class="php">function echoHTMLResult($result, $function)
{
  echo "&lt;h3&gt;$function&lt;/h3&gt;\n";
  echo '&lt;pre&gt;&lt;code&gt;';
  if(is_string($result))
    $result = str_replace('&lt;', '&amp;lt;', str_replace('&gt;', '&amp;gt;', $result));
  var_dump($result);
  echo '&lt;/code&gt;&lt;/pre&gt;';
}</code></pre>
<pre><code class="html">&lt;?php $test = new Test_DomDocument_HTML_Charset(); ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv="Content-type" content="text/html; charset=UTF-8"&gt;
  &lt;title&gt;Тестовая страничка&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $test-&gt;execute('echoHTMLResult') ?&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h3>Результаты</h3>
<p><a href="http://blog.fxposter.org/wp-content/uploads/2008/07/dom_html.png"><img class="alignnone size-medium wp-image-476" title="Test_DomDocument_HTML_Charset" src="http://blog.fxposter.org/wp-content/uploads/2008/07/dom_html-300x187.png" alt="" width="300" height="187" /></a></p>
<h3>Выводы</h3>
<p>Как можно понять из результатов - кодировка документа при использовании HTML определяется исключительно через тег meta, а точнее - через charset, который там указан:</p>
<pre><code class="html">&lt;meta http-equiv="Content-type" content="text/html; charset=UTF-8"&gt;</code></pre>
<p>При отсутствии указанного тега/charset&#8217;а в нём - <code class="php">$dom-&gt;encoding</code> будет равен NULL (что можно с успехом использовать).</p>
<p>В общем-то всё, в ближайшие дни еще будет статья про кодировку в XML-документах, где всё немного интереснее.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/07/20/domdocument-encoding-in-html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Простенькая менюшка для админки</title>
		<link>http://blog.fxposter.org/2008/07/18/admin-menu/</link>
		<comments>http://blog.fxposter.org/2008/07/18/admin-menu/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 23:37:08 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/?p=462</guid>
		<description><![CDATA[Не думаю, что кто-то реально заинтересуется, но всё-же. Написал я где-то полгодика назад менюшку в админке в одном проекте на Symfony. После этого менюшка эта перекочевала еще в несколько проектов, тоже в бэкэнды. Вот так она выглядит: А вот и её код: #nav, #nav * { margin: 0; padding: 0; } #nav { overflow: hidden; [...]]]></description>
			<content:encoded><![CDATA[<p>Не думаю, что кто-то реально заинтересуется, но всё-же. Написал я где-то полгодика назад менюшку в админке в одном проекте на <a href="http://www.symfony-project.org/">Symfony</a>. После этого менюшка эта перекочевала еще в несколько проектов, тоже в бэкэнды.</p>
<p>Вот так она выглядит:</p>
<p><img class="alignnone size-medium wp-image-463" title="Менюшка" src="http://blog.fxposter.org/wp-content/uploads/2008/07/menu.png" alt="Менюшка" width="261" height="52" /></p>
<p>А вот и её код:</p>
<pre><code class="css">#nav, #nav * {
  margin: 0;
  padding: 0;
}

#nav {
  overflow: hidden;
  background-color: #FFFFCC;
  border: 1px solid #73B65A;
  margin: 10px 0;
  zoom: 1;
}

#nav li {
  float: left;
  display: block;
}

#nav li a {
  padding: 2px;
  margin: 0 5px;
  display: block;
  height: 100%;
  color: #000000;
  text-decoration: none;
  border-top: 3px solid #FFFFCC;
  border-bottom: 3px solid #FFFFCC;
  float: left;
}

#nav li a:hover {
  border-bottom: 3px solid #73B65A;
}</code></pre>
<pre><code class="html">&lt;ul id="nav"&gt;
  &lt;li&gt;&lt;a href="..."&gt;Гостевая книга&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="..."&gt;Прайс&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="..."&gt;Login&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p><a href="http://blog.fxposter.org/wp-content/uploads/2008/07/menu.html">Пример</a>.</p>
<p>Авось кому-нибудь пригодится.</p>
<p><em><strong>PS</strong>. Менюха на оригинальность и инновационность не претендует!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/07/18/admin-menu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>W3C возвращается к HTML</title>
		<link>http://blog.fxposter.org/2007/03/09/w3c-html/</link>
		<comments>http://blog.fxposter.org/2007/03/09/w3c-html/#comments</comments>
		<pubDate>Fri, 09 Mar 2007 17:05:10 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/03/09/w3c-html/</guid>
		<description><![CDATA[Ну вот это и произошло. :) XHTML оказался никому не нужным. Подробнее можно прочесть тут.]]></description>
			<content:encoded><![CDATA[<p>Ну вот это и произошло. :) XHTML оказался никому не нужным. Подробнее можно прочесть <a href="http://softwaremaniacs.org/blog/2007/03/09/w3c-returns-to-html/">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/03/09/w3c-html/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: blog.fxposter.org @ 2012-02-05 02:24:34 -->
