我在使用DomDocument方面遇到了一些问题。 我想从test.php获取div中的内容并将其放入test2.php中的表单值中,我收到此错误
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 :(得分:0)
这是将目标文件的内容放入第二种方法的一种方法,假设目标文件是hello.php,并且该文件与test2.php存在于使用HTTP协议的同一域中。如果您在访问文件时忽略指示协议,那么您将成功仅检索需要解析的PHP,即echo 'hello!';
。以URL格式访问目标文件的技术如下:
file:hello.php
<?php
echo 'hello!';
?>
file:test2.php
$doc = new DomDocument;
$url = 'http://www.example.com/hello.php';
$contents = file_get_contents( $url );
$doc->loadHtml( $contents );
echo $doc->saveHTML(); // hello!
在此解决方案中,hello.php的内容将自动返回为HTML,这与PHP使用HTTP协议的方式相同。因此,$ contents可以很容易地传递给loadHTML方法。
注意:这种技术仅适用于文件来自同一域的情况,尽管它可能会影响Web服务器的性能。如果它们来自不同的域,除非您是两者的所有者,否则该技术是不可取的,以避免安全问题。为了更加安全,可以将file_get_contents()的结果传递给htmlentities()以避免潜在的XSS问题。