2015-01-10 45 views
0

我正面臨着使用DomDocument的一些問題。 我想抓住從test.php的一個div的內容並把它成test2.php形式值,我得到這個錯誤從不同的頁面獲取div內容DomDocument

的DOMDocument :: loadHTML():錯誤解析屬性名在實體

test.php的

<?php 
    include_once "connect_db.php"; 
    $sql = "SELECT * FROM client"; 
    $result = mysqli_query($conn, $sql); 

    if (mysqli_num_rows($result) > 0) { 
     // output data of each row 
     while($row = mysqli_fetch_assoc($result)) { 
     echo "<div id='drag' class='block' value='". $row["custNo"]."';>"; 
     echo "<div id='custNo'>Client ID: " . $row["custNo"]. "</div>"; 
     echo "</div>"; 
     } 
    } else { 
      echo "0 results"; 
      } 
    mysqli_close($conn); 
?> 

test2.php

<form class="form" action="#" id="siteVisitForm" method="post"> 
     <h3>Site Visit Date</h3> 
     <label>Client ID: <span>*</span></label> 
      <input type="text" id="clientID" name="clientID" value="<?php                   
                     $doc = new DomDocument; 
                     $doc->validateOnParse = true; 
                     $doc->loadHtml(file_get_contents('hello.php')); 
                     var_dump($doc->getElementById('custNo'));?>"/> 
     <label>Visit date: <span>*</span></label> 
      <input type="text" id="visitDate" name="visitDate"/> 
     <label>Comment:</label> 
      <textarea id="custComment" name="custComment" placeholder="comment......."></textarea> 
     <input type="submit" id="send" value="Send" name="submit"/> 
     <input type="button" id="cancel" value="Cancel"/> 
</form> 

我可以知道我該怎麼做?

+0

要從該文件獲取html,php必須先運行它。從它的url加載它可能會得到你的結果。 – Musa

+0

您試圖將PHP解析爲HTML。顯然這是不可能的。 –

+0

似乎有一個差異,因爲test2.php使用DOM來提取hello.php的內容,但您的示例代碼引用了名爲test.php的文件。 – slevy1

回答

0

下面是一種將目標文件的內容放入第二個的方法,假設目標文件是hello.php,並且該文件與test2.php使用HTTP協議存在於同一個域中。如果您在訪問文件時忽略了指示該協議,那麼您將只能檢索需要解析的PHP,即echo 'hello!';。訪問目標文件作爲URL的技術如下:

文件:hello.php

<?php 

echo 'hello!'; 

?> 

文件:test2.php

$doc = new DomDocument; 
$url = 'http://www.example.com/hello.php'; 
$contents = file_get_contents($url); 
$doc->loadHtml($contents); 
echo $doc->saveHTML(); // hello! 

在該溶液中,內容你好.php將被自動返回爲HTML格式,這就是PHP與HTTP協議一起工作的方式。所以,$ contents可以很容易地傳遞給loadHTML方法。

注意:只有當文件來自同一個域時,這種技術纔是可取的,儘管它可能會影響Web服務器的性能。如果他們來自不同的領域,那麼除非您是兩者的所有者,否則該技術是不可取的,以避免安全問題。爲了安全起見,可以將file_get_contents()的結果傳遞給htmlentities()以避免潛在的XSS問題。

+0

雖然這已經是他所做的了。 – Emil

+0

@Emil OP的test2.php文件中的代碼獲取文件hello.php的實際PHP代碼,而不是HTML中的解析結果。 – slevy1