我的网站上有一个小元素,显示当前页面标记的有效性。目前,它被静态设置为“HTML5 Valid”,因为我不断检查它是否实际上是 HTML5 有效的。如果不是,那么我会修复任何问题,使其保持 HTML5 有效。
不过,我希望这个元素是动态的。那么,有没有办法用当前 URL ping W3C 验证服务,接收结果,然后将结果插入 PHP 或 JavaScript 函数?W3C 是否为此提供了 API,还是您必须手动编写代码?
我的网站上有一个小元素,显示当前页面标记的有效性。目前,它被静态设置为“HTML5 Valid”,因为我不断检查它是否实际上是 HTML5 有效的。如果不是,那么我会修复任何问题,使其保持 HTML5 有效。
不过,我希望这个元素是动态的。那么,有没有办法用当前 URL ping W3C 验证服务,接收结果,然后将结果插入 PHP 或 JavaScript 函数?W3C 是否为此提供了 API,还是您必须手动编写代码?
W3C HTML 检查器(又名验证器)的维护者在这里。事实上,检查器确实公开了一个 API,让您可以这样做,例如:
https://validator.w3.org/nu/?doc=https%3A%2F%2Fgoogle.com%2F&out=json
…它以 JSON 形式返回结果。还有一个POST接口。
您可以在此处找到更多详细信息:
他们没有我知道的 API。
因此,我的建议是:
使用页面的 URL(使用或)GET
向结果页面 ( )发送请求 ( )。解析有效消息的响应(或简单的字符串搜索)。http://validator.w3.org/check?uri=
file_get_contents()
curl
DOMDocument
注意:这是一个脆弱的解决方案。如果 W3C 方面发生任何变化,则可能会中断。但是,它会起作用,而且这个工具已经使用了好几年了。
此外,如果您真的想要在您的实时站点上使用它,我强烈建议您使用某种缓存。在每个页面请求上都这样做是昂贵的。老实说,这应该是一个开发工具。正在运行并向您报告错误的东西。保持徽章静止。
下面是一个如何实现 W3C API 以在 PHP 中验证 HTML 的示例:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://validator.w3.org/nu/?out=json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '<... your html text to validate ...>',
CURLOPT_HTTPHEADER => array(
"User-Agent: Any User Agent",
"Cache-Control: no-cache",
"Content-type: text/html",
"charset: utf-8"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
//handle error here
die('sorry etc...');
}
$resJson = json_decode($response, true);
$resJson 看起来像这样:
{
"messages": [
{
"type": "error",
"lastLine": 13,
"lastColumn": 110,
"firstColumn": 5,
"message": "Attribute “el” not allowed on element “link” at this point.",
"extract": "css\">\n <link el=\"stylesheet\" href=\"../css/plugins/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.min.css\">\n <",
"hiliteStart": 10,
"hiliteLength": 106
},
{
"type": "info",
"lastLine": 294,
"lastColumn": 30,
"firstColumn": 9,
"subType": "warning",
"message": "Empty heading.",
"extract": ">\n <h1 id=\"promo_codigo\">\n ",
"hiliteStart": 10,
"hiliteLength": 22
},....
查看https://github.com/validator/validator/wiki/Service-»-Input-»-POST-body了解更多详情。