0

私は現在、HTML と PHP コードの分離に取り組んでいます。これは、現在私のために働いている私のコードです。

コード.php

<?php
$data['#text#'] = 'A';

$html = file_get_contents('test.html');

echo $html = str_replace(array_keys($data),array_values($data),$html);
?>

test.html

<html>
<head>
<title>TEST HTML</title>
</head>
<body>
<h1>#text#</h1>
</body>
</html>

出力: A

#text#値を検索して array_value Aに変更します。

現在、htmlファイルの「id」タグを検索するコードに取り組んでいます。「.html」ファイルで「id」を検索すると、array_values が>の中央に配置されます。

元:<div id="test"> **aray_values here** </div>

test.php

<?php

$data['id="test"'] = 'A';

$html = file_get_contents('test.html');

foreach ($data as $search => $value)
{
    if (strpos($html , $search))
    {
        echo 'FOUND';
        echo $value;
    }
}

?>

test.html

<html>
<head>
<title>TEST</title>
</head>
<body>
<div id="test" ></div>
</body>
</html>

></私の問題は、array_values を.htmlファイル内のすべての検索の途中に配置する方法がわからないことです。

望ましい出力:<div id="test" >A</div>

4

2 に答える 2

2

function callbackInsert($matches)
{
    global $data;
    return $matches[1].$matches[3].$matches[4].$data[$matches[3]].$matches[6];
}


$data['test'] = 'A';

$html = file_get_contents('test.html');

foreach ($data as $search => $value)
{
    preg_replace_callback('#(<([a-zA-Z]+)[^>]*id=")(.*?)("[^>]*>)([^<]*?)(</\\2>)#ism', 'callbackInsert', $html);
}

警告: コードはテストされておらず、改善される可能性があります - グローバル キーワードと > との間で許可される項目について

正規表現の説明:

(<([a-zA-Z]+) - any html tag starting including the last letter of the tag
[^>]* - anything that is inside a tag <>
id=")(.*?)(" - the id attribute and its value
[^>]* - anything that is inside a tag <>
>) - the closing tag
([^<]*?) - anything that is not a tag, tested by opening a tag <
(</\\2>) - the closing tag matching the 2nd bracket, ie. the matching opening tag
于 2013-11-07T19:18:43.013 に答える