Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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_Html_Regex_Code Injection - Fatal编程技术网

如何在字符串变量的某些点注入PHP代码?

如何在字符串变量的某些点注入PHP代码?,php,html,regex,code-injection,Php,Html,Regex,Code Injection,我有一个类,它在数组中存储指向CSS和Javascript文件的路径。这个类还编译我的最终页面HTML输出(存储在$output变量中)。我想循环使用我的$css和$js数组,并在$output中的特定点注入HTML。CSS文件必须在之前,JS文件必须在之前 在HTML模板文件中包含占位符$cssFiles和$jsFiles变量不是我的选择 更复杂的是(对不起),我需要一个故障保护,如果$output中不存在和/或,代码将在$output的最开始注入 我假设这是一个正则表达式问题,但我不知道模式

我有一个类,它在数组中存储指向CSS和Javascript文件的路径。这个类还编译我的最终页面HTML输出(存储在$output变量中)。我想循环使用我的$css和$js数组,并在$output中的特定点注入HTML。CSS文件必须在
之前,JS文件必须在
之前

在HTML模板文件中包含占位符$cssFiles和$jsFiles变量不是我的选择

更复杂的是(对不起),我需要一个故障保护,如果$output中不存在
和/或
,代码将在$output的最开始注入

我假设这是一个正则表达式问题,但我不知道模式是什么


谢谢

考虑到您愿意“解析”HTML,这不是一项容易的任务,实际上,我不确定正则表达式是否是这项工作的正确工具

如果您的
始终存在,我建议使用一个简单的方法:比regex更简单、更快

如果这些不总是存在。。。我想这会更难

对于“头部末端”部分,您可以检查是否在这里(例如,使用);如果没有,请尝试在
标记(简单:使用
str\u replace
)或
标记(在第一个标记之前插入)之后插入代码;这可能不是标题部分的结尾,但总比没有好

对于“正文结尾”部分,您可以检查
是否存在;如果没有,只需将代码连接到整个HTML字符串



无论如何,要“解析”HTML,我不会使用正则表达式,但我会使用一些DOM操作工具,比如与PHP捆绑在一起的DOMDocument类及其方法。

考虑到您愿意“解析”HTML,这不是一项容易的任务,我不确定正则表达式是否适合此工作

如果您的
始终存在,我建议使用一个简单的方法:比regex更简单、更快

如果这些不总是存在的话…我想这将是非常困难的

对于“头部末端”部分,您可以检查是否在此处(例如,使用);如果没有,请尝试在
标记(简单:使用
stru\u replace
)或
标记(在第一个标记之前插入);这可能不是头部部分的末端,但总比没有好

对于“正文结尾”部分,您可以检查
是否存在;如果没有,只需将代码连接到整个HTML字符串



在任何情况下,“解析”HTML,我不会使用正则表达式,但是,相反,我会使用一些DOM操作工具,比如与PHP捆绑在一起的DOMDocument类及其方法。

当一个简单的表达式就足够时,我不会使用正则表达式。听起来您已经在
$output
字符串中确定了要修改的明确位置,所以我会做些事情像这样:

$cssStr = '';
$jsStr = '';
foreach($css as $path) {
    $cssStr .= '<link rel="stylesheet" type="text/css" media="screen"'.
     'href="'.$path.'"/>';
}
if (strpos($output,'</head>') !== false)) {
    $output = str_replace('</head>',$cssStr.'</head>',$output);
} else {
    $output = $cssStr . $output;
}

foreach($js as $path) {
    $jsStr .= '<script type="text/javascript" src="'.$path.'"></script>';
}
if (strpos($output,'</body>') !== false)) {
    $output = str_replace('</body>',$jsStr.'</body>',$output);
} else {
    $output = $jsStr . $output;
}
$cssStr='';
$jsStr='';
foreach($css作为$path){
$cssStr.='';
}
if(strpos($output,,)!==false)){
$output=str_replace(“$cssStr.”,$output);
}否则{
$output=$cssStr.$output;
}
foreach($js作为$path){
$jsStr.='';
}
if(strpos($output,,)!==false)){
$output=str_replace(“$jsStr.”,$output);
}否则{
$output=$jsStr.$output;
}

如果一个简单的表达式就足够了,我不会使用正则表达式。听起来您已经在
$output
字符串中确定了要修改的清晰位置,因此我将执行以下操作:

$cssStr = '';
$jsStr = '';
foreach($css as $path) {
    $cssStr .= '<link rel="stylesheet" type="text/css" media="screen"'.
     'href="'.$path.'"/>';
}
if (strpos($output,'</head>') !== false)) {
    $output = str_replace('</head>',$cssStr.'</head>',$output);
} else {
    $output = $cssStr . $output;
}

foreach($js as $path) {
    $jsStr .= '<script type="text/javascript" src="'.$path.'"></script>';
}
if (strpos($output,'</body>') !== false)) {
    $output = str_replace('</body>',$jsStr.'</body>',$output);
} else {
    $output = $jsStr . $output;
}
$cssStr='';
$jsStr='';
foreach($css作为$path){
$cssStr.='';
}
if(strpos($output,,)!==false)){
$output=str_replace(“$cssStr.”,$output);
}否则{
$output=$cssStr.$output;
}
foreach($js作为$path){
$jsStr.='';
}
if(strpos($output,,)!==false)){
$output=str_replace(“$jsStr.”,$output);
}否则{
$output=$jsStr.$output;
}

完美-正是我所需要的。而且比我原来想象的要简单和优雅得多。谢谢完美-正是我需要的。而且比我原来想象的要简单和优雅得多。谢谢