2017-02-14 80 views
0

我正在開發一個使用存儲在數組中的HTML有效標記的網站,以便與輸入到系統中的用戶進行比較。我目前開發了包含我需要的所有HTML標籤的數組。我還開發了一個函數,根據存儲在數組中的數據驗證用戶輸入。在我的數組中搜索包含特定字符的值

如果它是有效的,那麼它會告訴用戶它已被接受,並且有效標籤將被放入包含用戶輸入的所有標籤的不同數組中。

但是我試圖創建這樣的功能,即當用戶在系統內輸入標籤時,將搜索包含反斜槓/的任何標籤的數組,因爲這將標識數組內的所有結束標籤。

所以我的問題是我將如何提取我的AllowedTags數組中包含/字符的所有記錄,並將它們存儲在新數組中。

<html> 
<head> 
</head> 
<body> 
<form id="HTMLValidation" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
<p> HTML Code: <input type="text" name="code"> 
<p><input type="submit" name="submit" value="Validate Your Code!"/></p> 
</form> 
<?php 
//Depricated 
//$TagArray = $UserInput.split(""); 
if(isset($_POST['code'])) 
    { 
     $UserInput = htmlspecialchars($_POST['code']); 
     $InputtedTags = array(); 

     //Array Containing all of the VALID HTML TAGS. 
     $AllowedTags = array("&lt;html&gt;","&lt;head&gt","&lt;body&gt","&lt;div&gt","&lt;p&gt","&lt;b&gt","&lt;base&gt","&lt;link&gt","&lt;meta&gt","&lt;style&gt","&lt;title&gt","&lt;address&gt","&lt;article&gt","&lt;aside&gt","&lt;footer&gt","&lt;h1&gt","&lt;h2&gt","&lt;h3&gt","&lt;h4&gt","&lt;h5&gt","&lt;h6&gt","&lt;header&gt","&lt;hgroup&gt","&lt;nav&gt","&lt;selection&gt","&lt;dd&gt","&lt;d1&gt","&lt;dt&gt","&lt;figcaption&gt","&lt;figure&gt","&lt;hr&gt","&lt;li&gt","&lt;main&gt","&lt;ol&gt","&lt;pre&gt","&lt;ul&gt","&lt;a&gt","&lt;abbr&gt","&lt;b&gt","&lt;bdi&gt","&lt;bdo&gt","&lt;br&gt","&lt;cite&gt","&lt;code&gt","&lt;data&gt","&lt;dfn&gt","&lt;em&gt","&lt;i&gt","&lt;kbd&gt","&lt;mark&gt","&lt;q&gt","&lt;rp&gt","&lt;rt&gt","&lt;rtc&gt","&lt;ruby&gt","&lt;s&gt","&lt;samp&gt","&lt;small&gt","&lt;span&gt","&lt;strong&gt","&lt;sub&gt","&lt;sup&gt","&lt;time&gt","&lt;u&gt","&lt;var&gt","&lt;wbr&gt","&lt;area&gt","&lt;audio&gt","&lt;img&gt","&lt;map&gt","&lt;track&gt","&lt;video&gt","&lt;embed&gt","&lt;object&gt","&lt;param&gt","&lt;source&gt","&lt;canvas&gt","&lt;noscript&gt","&lt;script&gt","&lt;del&gt","&lt;ins&gt","&lt;caption&gt","&lt;col&gt","&lt;colgroup&gt","&lt;table&gt","&lt;tbody&gt","&lt;td&gt","&lt;tfoot&gt","&lt;th&gt","&lt;thead&gt","&lt;tr&gt","&lt;button&gt","&lt;datalist&gt","&lt;fieldset&gt","&lt;form&gt","&lt;input&gt","&lt;label&gt","&lt;legend&gt","&lt;meter&gt","&lt;optgroup&gt","&lt;option&gt","&lt;output&gt","&lt;progress&gt","&lt;select&gt","&lt;textarea&gt","&lt;details&gt","&lt;dialog&gt","&lt;menu&gt","&lt;menuitem&gt","&lt;summary&gt","&lt;shadow&gt","&lt;slot&gt","&lt;template&gt","&lt;acronym&gt","&lt;applet&gt","&lt;basefont&gt","&lt;big&gt","&lt;blink&gt","&lt;center&gt","&lt;command&gt","&lt;content&gt","&lt;dir&gt","&lt;element&gt","&lt;font&gt","&lt;frame&gt","&lt;frameset&gt","&lt;isindex&gt","&lt;keygen&gt","&lt;listing&gt","&lt;marquee&gt","&lt;multicol&gt","&lt;nextid&gt","&lt;noembed&gt","&lt;plaintext&gt","&lt;shadow&gt","&lt;spacer&gt","&lt;strike&gt","&lt;tt&gt","&lt;xmp&gt","&lt;/html&gt","&lt;/head&gt","&lt;/body&gt","&lt;/div&gt","&lt;/p&gt","&lt;/b&gt","&lt;/base&gt","&lt;/link&gt","&lt;/meta&gt","&lt;/style&gt","&lt;/title&gt","&lt;/address&gt","&lt;/article&gt","&lt;/aside&gt","&lt;/footer&gt","&lt;/h1&gt","&lt;/h2&gt","&lt;/h3&gt","&lt;/h4&gt","&lt;/h5&gt","&lt;/h6&gt","&lt;/header&gt","&lt;/hgroup&gt","&lt;/nav&gt","&lt;/selection&gt","&lt;/dd&gt","&lt;/d1&gt","&lt;/dt&gt","&lt;/figcaption&gt","&lt;/figure&gt","&lt;/hr&gt","&lt;/li&gt","&lt;/main&gt","&lt;/ol&gt","&lt;/pre&gt","&lt;/ul&gt","&lt;/a&gt","&lt;/abbr&gt","&lt;/b&gt","&lt;/bdi&gt","&lt;/bdo&gt","&lt;/br&gt","&lt;/cite&gt","&lt;/code&gt","&lt;/data&gt","&lt;/dfn&gt","&lt;/em&gt","&lt;/i&gt","&lt;/kbd&gt","&lt;/mark&gt","&lt;/q&gt","&lt;/rp&gt","&lt;/rt&gt","&lt;/rtc&gt","&lt;/ruby&gt","&lt;/s&gt","&lt;/samp&gt","&lt;/small&gt","&lt;/span&gt","&lt;/strong&gt","&lt;/sub&gt","&lt;/sup&gt","&lt;/time&gt","&lt;/u&gt","&lt;/var&gt","&lt;/wbr&gt","&lt;/area&gt","&lt;/audio&gt","&lt;/img&gt","&lt;/map&gt","&lt;/track&gt","&lt;/video&gt","&lt;/embed&gt","&lt;/object&gt","&lt;/param&gt","&lt;/source&gt","&lt;/canvas&gt","&lt;/noscript&gt","&lt;/script&gt","&lt;/del&gt","&lt;/ins&gt","&lt;/caption&gt","&lt;/col&gt","&lt;/colgroup&gt","&lt;/table&gt","&lt;/tbody&gt","&lt;/td&gt","&lt;/tfoot&gt","&lt;/th&gt","&lt;/thead&gt","&lt;/tr&gt","&lt;/button&gt","&lt;/datalist&gt","&lt;/fieldset&gt","&lt;/form&gt","&lt;/input&gt","&lt;/label&gt","&lt;/legend&gt","&lt;/meter&gt","&lt;/optgroup&gt","&lt;/option&gt","&lt;/output&gt","&lt;/progress&gt","&lt;/select&gt","&lt;/textarea&gt","&lt;/details&gt","&lt;/dialog&gt","&lt;/menu&gt","&lt;/menuitem&gt","&lt;/summary&gt","&lt;/shadow&gt","&lt;/slot&gt","&lt;/template&gt","&lt;/acronym&gt","&lt;/applet&gt","&lt;/basefont&gt","&lt;/big&gt","&lt;/blink&gt","&lt;/center&gt","&lt;/command&gt","&lt;/content&gt","&lt;/dir&gt","&lt;/element&gt","&lt;/font&gt","&lt;/frame&gt","&lt;/frameset&gt","&lt;/isindex&gt","&lt;/keygen&gt","&lt;/listing&gt","&lt;/marquee&gt","&lt;/multicol&gt","&lt;/nextid&gt","&lt;/noembed&gt","&lt;/plaintext&gt","&lt;/shadow&gt","&lt;/spacer&gt","&lt;/strike&gt","&lt;/tt&gt","&lt;/xmp&gt"); 
     //$Tags = implode(",",$AllowedTags); 
     //$OpenTags = implode(",",$AllowedTags); 

     //Search Allowed Tags Array For Values Containing a Backslash(/) 
     $CloseTags = implode(" ",$AllowedTags); 
     $needle = '/'; 
     $ret = array_keys(array_filter($AllowedTags, function($var) use ($needle){ 
        return strpos($var, $needle) !== false;})); 
     print_r($ret); 

     //Check What The User Has Inputted Into The System against the AllowedTags Array 
     //If it is true then display to the user the tag is valid 
     //Push The value that the user entered onto the InputtedTags Array 
     foreach($AllowedTags as $data) 
      { 

       if(strpos($UserInput,$data) !==false) 
        { 
         echo($UserInput. ": Valid Tags"); 
         array_push($InputtedTags,$UserInput); 
        } 

      } 
     print_r($InputtedTags); 
    } 
?> 
</body> 
</html> 
+0

設置'$ ret'的代碼有什麼問題? – Barmar

+0

你應該使用array_filter()函數。 –

+0

你爲什麼在'array_filter()'的結果上使用'array_keys()'?如果你想要標籤列表,'array_filter()'返回它。 – Barmar

回答

1

「我怎麼會提取含有/字符我AllowedTags陣列中的所有記錄,保存這些新的陣列內的」

$filtered_tags = array_filter($AllowedTags, function($val) { 
     return (bool)preg_match('/\//', $val); 
    }); 

    print_r($filtered_tags); 
+0

感謝您的工作如預期的那樣感謝您的意見。 –

0

如果用戶提供無尖括號和標籤唯一編寫標籤名稱(比如說「head」),那麼也許你可以在用戶輸入字符串的開頭連接一個反斜槓(),同時在$ AllowedTags中搜索結束標籤。 如果我誤解了這個問題,我很抱歉。

+0

用戶也輸入標籤,但我已經修復了我非常感謝您輸入的問題 –

相關問題