簡體   English   中英

如何確保字符串在php中被腳本標記包圍?

[英]how can I ensure string is surrounded by script tag in php?

我有這些假想的字符串:

$txts=
  array('<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>',
        '<script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script>',
        'document.getElementById("demo").innerHTML = "Hello JavaScript!";');

現在,我想使用一種優雅的簡單解決方案來檢查<script></script>標簽是否圍繞字符串,如果不是,請用這些標簽圍繞字符串。 因此, $txts[0]$txts[1]是有效的,但$txt[2]應該用<script> </script>包圍

我腦子里有幾個解決方案,但是沒有一個對我“坐下”,因為這些解決方案過於復雜或不干凈。

您能提出一個適當的解決方案嗎?

它一定是正則表達式解決方案嗎? 遍歷陣列並在必要時對其進行修復。 確保最后有一個帶有開始和結束標簽的數組。

<?php
$txts=
  array('<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>',
        '<script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script>',
        'document.getElementById("demo").innerHTML = "Hello JavaScript!";');

$opentag = "<script";
$closingtag = "</script>";
for ($i=0;$i<count($txts);$i++) {
    if (strpos($txts[$i], $opentag) === false) $txts[$i] = $opentag.">".$txts[$i];
    if (substr($txts[$i], -(strlen($closingtag))) !== $closingtag) $txts[$i] .= $closingtag;
}
print_r($txts); // all entries have open and closing tags in the end
?>

檢查每個數組元素:

foreach($txts as $txt) {
        return is_int(strpos($txt, '<script')) && is_int(strpos($txt, '</script>')));
}

或通過功能:

function checkTags($beggining, $ending, $string)
{
     return is_int(strpos($string, $beggining)) && is_int(strpos($string, $ending)))
}

每個元素的調用函數

foreach($txts as $txt) {
   if(!checkTags('<script','</script>', $txt)) {
       //treat error case
   }
}

注意: 之所以使用is_int,是因為子字符串可能位於位置0 (在您的情況下為開頭),並且評估為false

/^<script[^<]*>/確保開始標記是完整的

/<\\/script>$/確保結束標記在那里

我會這樣:

$txts = array(
    '<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>',
    '<script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script>',
    'document.getElementById("demo").innerHTML = "Hello JavaScript!";'
);

foreach ($txts as &$txt) {
    if (!preg_match('/^<script[^<]*>/', $txt)) {
        $txt = '<script>' . $txt;
    }

    if (!preg_match('/<\/script>$/', $txt)) {
        $txt = $txt . '</script>';
    }
}

var_dump($txts);

輸出:

array(3) {
  [0]=>
  string(66) "<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>"
  [1]=>
  string(81) "<script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script>"
  [2]=>
  &string(81) "<script>document.getElementById("demo").innerHTML = "Hello JavaScript!";</script>"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM