Show
Ignore:
Timestamp:
01/20/10 19:19:15 (3 years ago)
Author:
MugeSo
Message:

CDATAセクションが消し去られる問題に対応しました。

Location:
lang/php/HTML_CSS_Mobile/branches/mugeso-accept_html_with_CDATA_section
Files:
2 modified
1 copied

Legend:

Unmodified
Added
Removed
  • lang/php/HTML_CSS_Mobile/branches/mugeso-accept_html_with_CDATA_section/HTML/CSS/Mobile.php

    r32393 r36489  
    3737 *   ( http://search.cpan.org/~tokuhirom/HTML-DoCoMoCSS-0.01/lib/HTML/DoCoMoCSS.pm ) 
    3838 *   のPHP移殖版 
    39  *  
    40  * @package  
     39 * 
     40 * @package 
    4141 * @version 0.1.5 
    4242 * @copyright 2008 yudoufu 
    43  * @author Daichi Kamemoto(a.k.a yudoufu) <daikame@gmail.com>  
     43 * @author Daichi Kamemoto(a.k.a yudoufu) <daikame@gmail.com> 
    4444 * @license MIT License 
    4545 */ 
     
    5151        private $dom_xpath; 
    5252        private $css_files = array(); 
    53         private $html_css;  
     53        private $html_css; 
    5454 
    5555        /** 
    5656         * getInstance インスタンスを取得 
    57          *  
     57         * 
    5858         * @return class 
    5959         */ 
     
    6565        /** 
    6666         * setBaseDir CSSのベースディレクトリ(通常はDocumentRoot)を設定 
    67          *  
    68          * @param string $base_dir  
     67         * 
     68         * @param string $base_dir 
    6969         * @return class 
    7070         */ 
     
    7878         * setMode CSSのチェックモードを設定 
    7979         * #TODO: もっとしっかりモード実装 
    80          *  
    81          * @param string $mode  
     80         * 
     81         * @param string $mode 
    8282         * @return class 
    8383         */ 
     
    9090        /** 
    9191         * addCSSFiles CSSのファイルをプログラム側から読み込む 
    92          *  
    93          * @param array $files  
     92         * 
     93         * @param array $files 
    9494         * @return class 
    9595         */ 
     
    140140                $document = preg_replace('/&(#(?:\d+|x[0-9a-fA-F]+)|[A-Za-z0-9]+);/', 'HTMLCSSINLINERESCAPE%$1%::::::::', $document); 
    141141 
     142                // CDATAを退避 
     143                $cdata_pattern = '/' . preg_quote('<![CDATA[') . '.*' . preg_quote(']]>') . '/Us'; 
     144                $escaped_cdata = null; 
     145                if($num_matched = preg_match_all($cdata_pattern, $document, $e)) { 
     146                        $escaped_cdata = $e[0]; 
     147                        for($i = 0; $i < $num_matched; $i++) { 
     148                                $cdata_replacements[] = "HTMLCSSCDATAPLACEHOLDER$i::::::::"; 
     149                                $cdata_patterns[] = $cdata_pattern; 
     150                        } 
     151                        $document = preg_replace($cdata_patterns, $cdata_replacements, $document, 1); 
     152                } 
     153                 
    142154                // 機種依存文字がエラーになる問題を回避するため、UTF-8に変換して処理 
    143155                $doc_encoding = mb_detect_encoding($document, 'sjis-win, UTF-8, eucjp-win'); 
     
    237249                } 
    238250 
     251                // エスケープしていたCDATAを復元 
     252                if($escaped_cdata) { 
     253                        $result = str_replace($cdata_replacements, $escaped_cdata, $result); 
     254                } 
     255                 
    239256                // エスケープしていた参照を復元 
    240257                $result = preg_replace('/HTMLCSSINLINERESCAPE%(#(?:\d+|x[0-9a-fA-F]+)|[A-Za-z0-9]+)%::::::::/', '&$1;', $result); 
     
    251268        /** 
    252269         * loadCSS 各所で指定されているCSSファイルを読み込み、HTML_CSSのオブジェクト配列として格納する 
    253          *  
     270         * 
    254271         * @return void 
    255272         */ 
     
    311328 
    312329        /** 
    313          * _loadCSS  
    314          *  
    315          * @param string $css_string  
     330         * _loadCSS 
     331         * 
     332         * @param string $css_string 
    316333         * @return void 
    317334         */ 
  • lang/php/HTML_CSS_Mobile/branches/mugeso-accept_html_with_CDATA_section/sample/sample.html

    r17637 r36489  
    2323<div>�ӂ��ӂ��@</div> 
    2424<a href="mailto:hoge@hogehoge?subject=hoge&amp;body=hogehoe">�����N</a> 
    25  
     25<![CDATA[cdata]]> 
     26<![CDATA[multi 
     27  line 
     28  cdata]]> 
     29<![CDATA[cdata with &nbsp; character refference]]> 
     30<![CDATA[CDATA with > and < ]] ]]> 
    2631</body> 
    2732</html>