2

我的网站上有一个小元素,显示当前页面标记的有效性。目前,它被静态设置为“HTML5 Valid”,因为我不断检查它是否实际上是 HTML5 有效的。如果不是,那么我会修复任何问题,使其保持 HTML5 有效。

不过,我希望这个元素是动态的。那么,有没有办法用当前 URL ping W3C 验证服务,接收结果,然后将结果插入 PHP 或 JavaScript 函数?W3C 是否为此提供了 API,还是您必须手动编写代码?

4

3 回答 3

4

W3C HTML 检查器(又名验证器)的维护者在这里。事实上,检查器确实公开了一个 API,让您可以这样做,例如:

https://validator.w3.org/nu/?doc=https%3A%2F%2Fgoogle.com%2F&out=json

…它以 JSON 形式返回结果。还有一个POST接口。

您可以在此处找到更多详细信息:

于 2015-08-05T17:15:50.093 回答
3

他们没有我知道的 API。

因此,我的建议是:

使用页面的 URL(使用或)GET向结果页面 ( )发送请求 ( )。解析有效消息的响应(或简单的字符串搜索)。http://validator.w3.org/check?uri=file_get_contents()curlDOMDocument

注意:这是一个脆弱的解决方案。如果 W3C 方面发生任何变化,则可能会中断。但是,它会起作用,而且这个工具已经使用了好几年了。

此外,如果您真的想要在您的实时站点上使用它,我强烈建议您使用某种缓存。在每个页面请求上都这样做是昂贵的。老实说,这应该是一个开发工具。正在运行并向您报告错误的东西。保持徽章静止。

于 2012-07-15T17:51:28.153 回答
2

下面是一个如何实现 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了解更多详情。

于 2018-08-21T01:12:45.890 回答