2

私の Web サイトには、現在のページのマークアップの有効性を表示する小さな要素があります。実際にHTML5が有効かどうかを常にチェックしているため、現時点では「HTML5有効」として静的に設定されています。そうでない場合は、HTML5 で有効なままになるように問題を修正します。

ただし、この要素は動的にしたいと思います。では、現在の URL で W3C 検証サービスに ping を実行し、結果を受け取り、その結果を PHP または JavaScript 関数にプラグインする方法はありますか? W3C はこのための API を提供していますか、それとも手動でコーディングする必要がありますか?

4

3 に答える 3

3

彼らは私が知っているAPIを持っていません。

そのため、私の提案は次のようになります。

ページのURL(またはを使用)を使用GETして、結果ページ( )にリクエスト()を送信します。有効なメッセージ(または単純な文字列検索)の応答を解析します。http://validator.w3.org/check?uri=file_get_contents()curlDOMDocument

注:これは脆弱なソリューションです。W3C側で何か変更があった場合、破損する可能性があります。ただし、それは機能し、このツールは数年前から利用可能です。

また、ライブサイトでこれが本当に必要な場合は、何らかのキャッシュを強くお勧めします。すべてのページリクエストでこれを行うには費用がかかります。正直なところ、これは開発ツールでなければなりません。実行され、エラーを報告するもの。バッジを静的に保ちます。

于 2012-07-15T17:51:28.153 に答える
2

PHP で HTML を検証するために W3C API を実装する方法の例を次に示します。

   $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 に答える