示例#1
0
 function cloakHTML($s)
 {
     $s = '' . $s;
     $return = array();
     for ($i = 0; $i < strlen($s); $i++) {
         if (ctype_alnum($s[$i])) {
             $return[] = '&#' . ord($s[$i]) . ';';
         } else {
             $return[] = fesc($s[$i]);
         }
     }
     return implode('', $return);
 }
示例#2
0
文件: CoreTest.php 项目: ejz/core
 public function testGetTagAttr()
 {
     $fesc = fesc($_ = "<&\"'>");
     $tag = "\n            <a data-value=1 fesc='{$fesc}' href='/about/' class=\"class\" target=_blank>About</a>\n        ";
     $attr = getTagAttr($tag);
     $attrHref = getTagAttr($tag, 'href');
     $attrNone = getTagAttr($tag, 'none');
     $attrFesc = getTagAttr($tag, 'fesc');
     $this->assertEquals($attr['href'], "/about/");
     $this->assertEquals($attr['class'], "class");
     $this->assertEquals($attr['target'], "_blank");
     $this->assertEquals($attr['data-value'], "1");
     $this->assertTrue($attrHref ? true : false);
     $this->assertFalse($attrNone ? true : false);
     $this->assertEquals($attrFesc, $_);
 }
示例#3
0
文件: core.php 项目: ejz/core
function prepareAttr($attr)
{
    $collector = array();
    if (is_string($attr)) {
        $attr = getTagAttr($attr);
    }
    foreach ($attr as $k => $v) {
        if (!$v or !$k) {
            continue;
        }
        if (is_assoc($v)) {
            $_collector = array();
            foreach ($v as $_k => $_v) {
                if (!$_v or !$_k) {
                    continue;
                }
                $_collector[] = sprintf('%s:%s', fesc($_k), fesc($_v));
            }
            $v = implode('; ', $_collector);
        } elseif (is_array($v)) {
            $v = implode(' ', $v);
        }
        $collector[] = sprintf('%s="%s"', $k, fesc($v));
    }
    return implode(' ', $collector);
}
示例#4
0
 private function toArray($node, $level)
 {
     $array = array();
     if (!$node) {
         return array();
     }
     if ($node instanceof DOMAttr) {
         return $node->value;
     }
     if ($node instanceof DOMNodeList) {
         foreach ($node as $n) {
             $array[] = $this->toArray($n, $level);
         }
         return $array;
     }
     if ($node->nodeType == XML_TEXT_NODE) {
         if ($level) {
             return esc(trim($node->nodeValue));
         } else {
             return trim($node->nodeValue);
         }
     }
     if ($node->nodeType == XML_COMMENT_NODE) {
         return '<!--' . $node->nodeValue . '-->';
     }
     @($tag = $node->tagName);
     if (!$tag) {
         return '';
     }
     $collector = "<{$tag}%s>%s</{$tag}>";
     $closed = "<{$tag}%s />";
     $attr = array();
     $inner = array();
     if ($node->hasAttributes()) {
         foreach ($node->attributes as $a) {
             $attr[] = ' ' . sprintf('%s="%s"', $a->nodeName, fesc($a->nodeValue));
         }
     }
     if ($node->hasChildNodes()) {
         foreach ($node->childNodes as $childNode) {
             $t = $this->toArray($childNode, $level + 1);
             if ($t or $t == 0) {
                 $inner[] = $t;
             }
         }
     }
     $attr = implode('', $attr);
     $inner = implode('', $inner);
     if (!$inner and in_array($tag, explode(',', 'br,img,hr,param'))) {
         return sprintf($closed, $attr);
     }
     return sprintf($collector, $attr, $inner);
 }