由于缺少 = 字符串的引号,无法验证 html

Unable to validate html due to missing quotation for = string

我在尝试验证文档时收到此错误 "Error: = in an unquoted attribute value. Probable causes: Attributes running together or a URL query string in an unquoted attribute value."

这是我的代码:

print("<a href=" . $_SERVER["PHP_SELF"] . '?id=' . $student->hentId() . ">" . $student->hentNavn() . "</a><br/>\n");

HTML 输出如下所示:

<a href=/StudentDatabase/StudentRegister.php?id=1>Petter Andersen</a><br/>

如何正确添加报价?

通过使用 \

转义来添加引号

您希望 id=1 出现在 url 中吗?我猜这是它认为缺少引号的属性

print("<a href=\" . $_SERVER["PHP_SELF"] . '?id=' . $student->hentId() . \">" . $student->hentNavn() . "</a><br/>\n");

直接在link中使用$_SERVER["PHP_SELF"]是不安全的。根据您的代码,该网站可能容易受到 XSS 攻击,不需要的 JavaScript 可能会在访问 page/url/%22%3E%3Cscript%3Ealert('xss')%3C /script%3E%3Cfoo%22 时结束注入。 student idstudent name 也是如此,如果这些记录未经过清理,html 可能会损坏或容易受到 XSS 攻击。

建议使用函数 rawurlencodeurlencodehtmlspecialchars 来清理生成的 link。

<?php
$url = rawurlencode($_SERVER["PHP_SELF"]) . "?id=" . urlencode($student->hentId());
?>

<a href="<?php echo htmlspecialchars($url); ?>">
<?php echo htmlspecialchars($student->hentNavn()); ?>
</a>