为什么输出控制没有捕捉到 sql?
Why output control doesn't catch sql?
我写了一段代码,如果标题不是该类型的第一个标题,它会将标题 h1 更改为 h2。它有效,但仅当我只使用 PHP 时。如果我想在网站上使用它,哪个是使用数据库输出内容,该代码不起作用。
我在 <html>
之前使用 ob_start() 和 ob_get_contents() + ob_end_clean() + 我在 </html>
之后的其余代码,所以我认为从数据库中“捕获”内容一定是错误的,但我不确定。我试图在基于 WordPress 的网站上使用该代码。
我的代码(我知道这可能不是最好的解决方案,但是当我在没有 CMS 的任何网站上使用它时它可以工作):
<!DOCTYPE html>
<?php
ob_start();
?>
<html>
<head>
<title>random page</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-5">
<h1>afdsfdassfdfdsa</h1>
</div>
</div>
</div>
<h1>sadffsadf afdsfdsa afsdfs?</h1>
<h1 class="superclass">random text?</h1>
<div>
<p>some ending content</p>
</div>
</body>
</html>
<?php
$bufferContent = ob_get_contents();
ob_end_clean();
$matchedContent = '';
$endContent = '';
$modifiedContent = '';
$firstHeadingBoolean = true;
$h1Pattern = array();
$h1Pattern[0] = '%<h1(.*?)>%';
$h1Pattern[1] = '%</h1>%';
$h1Replacement = array();
$h1Replacement[0] = '<h2>';
$h1Replacement[1] = '</h2>';
if(preg_match_all('%((.|\n)*?)(<h1.*?>.*?</h1>)%', $bufferContent, $contentMatches)){
foreach($contentMatches[0] as $matches) {
$matchedContent .= $matches;
}
$endContent = str_replace($matchedContent, '', $bufferContent);
foreach ($contentMatches[0] as $matches) {
if(!$firstHeadingBoolean){
$firstHeadingBoolean = false;
} else {
$matches = preg_replace($h1Pattern, $h1Replacement, $matches);
}
$modifiedContent .= $matches;
}
echo $modifiedContent;
echo $endContent;
} else {
echo $bufferContent;
}
?>
编辑:我尝试使用那里的解决方案但没有任何改变:WordPress filter to modify final html output
现在,经过一些测试,我可以看到它不起作用,因为 preg_match_all 不能正常工作。任何人都知道 preg_match_all 有什么问题吗?我在 regex101 和我的本地主机上测试了该正则表达式模式,一切正常。我不明白,为什么它在这里不起作用?
好的,所以这不是 sql 的问题,而是正则表达式的问题。为了解决这个问题,我使用了这样的代码:
<?php
ob_start();
?>
<!-- html code -->
<?php
$bufferContent = ob_get_contents();
ob_end_clean();
$bufferContent = preg_split("%(?=<h1)%",$bufferContent);
$i = 0;
$h1Pattern = array();
$h1Pattern[0] = '%<h1(.*?)>%';
$h1Pattern[1] = '%</h1>%';
$h1Replacement = array();
$h1Replacement[0] = '<h2>';
$h1Replacement[1] = '</h2>';
foreach($bufferContent as $bufferElement){
if(preg_match("%<h1%", $bufferElement)){
if($i > 0){
echo preg_replace($h1Pattern, $h1Replacement, $bufferElement);
} else {
echo $bufferElement;
$i++;
}
} else {
echo $bufferElement;
}
}
?>
我写了一段代码,如果标题不是该类型的第一个标题,它会将标题 h1 更改为 h2。它有效,但仅当我只使用 PHP 时。如果我想在网站上使用它,哪个是使用数据库输出内容,该代码不起作用。
我在 <html>
之前使用 ob_start() 和 ob_get_contents() + ob_end_clean() + 我在 </html>
之后的其余代码,所以我认为从数据库中“捕获”内容一定是错误的,但我不确定。我试图在基于 WordPress 的网站上使用该代码。
我的代码(我知道这可能不是最好的解决方案,但是当我在没有 CMS 的任何网站上使用它时它可以工作):
<!DOCTYPE html>
<?php
ob_start();
?>
<html>
<head>
<title>random page</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-5">
<h1>afdsfdassfdfdsa</h1>
</div>
</div>
</div>
<h1>sadffsadf afdsfdsa afsdfs?</h1>
<h1 class="superclass">random text?</h1>
<div>
<p>some ending content</p>
</div>
</body>
</html>
<?php
$bufferContent = ob_get_contents();
ob_end_clean();
$matchedContent = '';
$endContent = '';
$modifiedContent = '';
$firstHeadingBoolean = true;
$h1Pattern = array();
$h1Pattern[0] = '%<h1(.*?)>%';
$h1Pattern[1] = '%</h1>%';
$h1Replacement = array();
$h1Replacement[0] = '<h2>';
$h1Replacement[1] = '</h2>';
if(preg_match_all('%((.|\n)*?)(<h1.*?>.*?</h1>)%', $bufferContent, $contentMatches)){
foreach($contentMatches[0] as $matches) {
$matchedContent .= $matches;
}
$endContent = str_replace($matchedContent, '', $bufferContent);
foreach ($contentMatches[0] as $matches) {
if(!$firstHeadingBoolean){
$firstHeadingBoolean = false;
} else {
$matches = preg_replace($h1Pattern, $h1Replacement, $matches);
}
$modifiedContent .= $matches;
}
echo $modifiedContent;
echo $endContent;
} else {
echo $bufferContent;
}
?>
编辑:我尝试使用那里的解决方案但没有任何改变:WordPress filter to modify final html output 现在,经过一些测试,我可以看到它不起作用,因为 preg_match_all 不能正常工作。任何人都知道 preg_match_all 有什么问题吗?我在 regex101 和我的本地主机上测试了该正则表达式模式,一切正常。我不明白,为什么它在这里不起作用?
好的,所以这不是 sql 的问题,而是正则表达式的问题。为了解决这个问题,我使用了这样的代码:
<?php
ob_start();
?>
<!-- html code -->
<?php
$bufferContent = ob_get_contents();
ob_end_clean();
$bufferContent = preg_split("%(?=<h1)%",$bufferContent);
$i = 0;
$h1Pattern = array();
$h1Pattern[0] = '%<h1(.*?)>%';
$h1Pattern[1] = '%</h1>%';
$h1Replacement = array();
$h1Replacement[0] = '<h2>';
$h1Replacement[1] = '</h2>';
foreach($bufferContent as $bufferElement){
if(preg_match("%<h1%", $bufferElement)){
if($i > 0){
echo preg_replace($h1Pattern, $h1Replacement, $bufferElement);
} else {
echo $bufferElement;
$i++;
}
} else {
echo $bufferElement;
}
}
?>