Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,如何确保字符串被脚本标记包围?_Php_Regex - Fatal编程技术网

在php中,如何确保字符串被脚本标记包围?

在php中,如何确保字符串被脚本标记包围?,php,regex,Php,Regex,我有这些虚构的字符串: $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("de

我有这些虚构的字符串:

$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!";');
$txts=
数组(“”,
'document.getElementById(“demo”).innerHTML=“Hello JavaScript!”,
'document.getElementById(“demo”).innerHTML=“Hello JavaScript!”);
现在我想要一个优雅的简单解决方案来检查
标记是否围绕字符串,如果没有,则用这些标记围绕字符串。 因此,
$txts[0]
$txts[1]
是有效的,但是
$txt[2]
应该被
包围

我脑子里有几个解决方案,但没有一个适合我,它们过于复杂或不干净


你能想出一个合适的解决方案吗?

检查每个数组元素:

foreach($txts as $txt) {
        return is_int(strpos($txt, '<script')) && is_int(strpos($txt, '</script>')));
}
为每个元素调用函数

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

如果(!checkTags('它必须是一个正则表达式解决方案吗?在数组上循环,并在必要时修复它。确保您有一个最后带有打开和关闭标记的数组

<?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
?>
/^
字符串(66)”
[1]=>
字符串(81)“document.getElementById(“demo”).innerHTML=“Hello JavaScript!”
[2]=>
&字符串(81)“document.getElementById(“demo”).innerHTML=“Hello JavaScript!”
}

使用lukeI think会让它变得更加复杂。字符串的来源是表单上的一个输入框,可以发布。我只需要知道它们是否包含脚本标记,如果没有,请添加它们。感谢您的建议!这是唯一真正明智的方法。而且不确定为什么会如此复杂……其他所有标记都会以辉煌的方式出现。Ca我不明白为什么它没有用,因为它完全符合“检查[…]标记是否围绕字符串,如果没有,则用这些标记围绕字符串”的要求。我也不理解否决票。你的解决方案在我看来是最好的。
<?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
?>
$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>"
}