Changeset 21717


Ignore:
Timestamp:
2012/04/09 04:08:55 (9 years ago)
Author:
Seasoft
Message:

#1738 (HTML_TAG_CHECK 大文字がすり抜ける)
#1684 (PHPの言語特性に合わせた簡素な実装に改善する)
#814 (mtb_allowed_tag 閉じタグは登録しなくても良いようにしたい)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/class/SC_CheckError.php

    r21596 r21717  
    5858        } 
    5959        $this->createParam($value); 
    60         // 含まれているタグを抽出する 
    61         preg_match_all("/<([\/]?[a-z]+)/", $this->arrParam[$value[1]], $arrTag); 
    62  
    63         foreach ($arrTag[1] as $val) { 
    64             $find = false; 
    65  
    66             foreach ($value[2] as $tag) { 
    67                 $tag = preg_replace('/^\\//', '\/', $tag); 
    68                 if (preg_match('/^' . $tag . "$/i", $val)) { 
    69                     $find = true; 
    70                     break; 
    71                 } 
    72             } 
    73  
    74             if (!$find) { 
    75                 $this->arrErr[$value[1]] = '※ ' . $value[0] . 'に許可されていないタグ[' . strtoupper($val) . ']が含まれています。<br />'; 
    76                 return; 
    77             } 
    78         } 
     60        // HTMLに含まれているタグを抽出する 
     61        preg_match_all('/<\/?([a-z]+)/i', $this->arrParam[$value[1]], $arrTagIncludedHtml); 
     62 
     63        $arrDiffTag = array_diff($arrTagIncludedHtml[1], $value[2]); 
     64 
     65        if (empty($arrDiffTag)) return; 
     66 
     67        // 少々荒っぽいが、表示用 HTML に変換する 
     68        foreach ($arrDiffTag as &$tag) { 
     69            $tag = '[' . htmlspecialchars($tag) . ']'; 
     70        } 
     71        $html_diff_tag_list = implode(', ', $arrDiffTag); 
     72 
     73        $this->arrErr[$value[1]] = '※ ' . $value[0] . 'に許可されていないタグ ' . $html_diff_tag_list . ' が含まれています。<br />'; 
    7974    } 
    8075 
Note: See TracChangeset for help on using the changeset viewer.