2016-09-12 5 views
1

出力バッファにいくつかの正規表現を実行したいのですが、次のコードでは目的の効果が得られません。私は最初に正規表現を実行して "{{"と "}}"で囲まれたものを置き換えたいと思っていますが、その後すぐにHTML出力を縮小したいと考えています。PHP str_replaceを出力バッファに2回

私は、

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>{{title}}</title> 
    <link href="css/cosmo.min.css" rel="stylesheet"> 
    <!--[if lt IE 9]> 
     <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> 
     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
    <![endif]--> 
</head> 
<body> 
    {{body}} 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script src="js/bootstrap.min.js"></script> 
</body> 

付::

<?php 
ob_start(function($buffer) { 
    $viewfile = join(DIRECTORY_SEPARATOR, array(VIEWS_ROOT, basename(pathinfo(__FILE__)['filename'] . "phtml"))); 

    if (file_exists($viewfile)) { 
     $body = file_get_contents($viewfile); 
    } else { 
     $body = file_get_contents(join(DIRECTORY_SEPARATOR, array(VIEWS_ROOT, basename("index.phtml")))); 
    } 

    preg_replace(array("/\>[^\S ]+/s", "/[^\S ]+\</s", "/(\s)+/s"), array(">", "<", "\\1"), ob_get_contents()); 

    return (str_replace(array("{{title}}", "{{body}}", "/\>[^\S ]+/s", "/[^\S ]+\</s", "/(\s)+/s"), array("Project", $body, ">", "<", "\\1"), $buffer)); 
}); 

require_once(join(DIRECTORY_SEPARATOR, array(LAYOUTS_ROOT, "layout.phtml"))); 

ob_end_flush(); 
?> 

出力は、次のファイルのマージです:これまでに得たVEの

<h1>Hello, World</h1> 

そして、私は次の出力たい:私は次のように上記のreturn文を置き換え所望の出力を得るために

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Project</title><link href="css/cosmo.min.css" rel="stylesheet"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--></head><body><h1>Hello, Julian</h1><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script><script src="js/bootstrap.min.js"></script></body></html> 
+0

あなたはプットの例を提供する必要がありますし、関連する所望の出力。 –

+0

@Patrick Q - done –

答えて

0

を:

return (preg_replace(array("/\>[^\S]+/s", "/[^\S]+\</s", "/(\s)+/s"), array(">", "<", "\\1"), str_replace(array("{{title}}", "{{body}}"), array("Project", $body), $buffer)));