Nu Html 檢查器 (v.Nu) 可協助您發現 HTML、CSS 和 SVG 中的意外錯誤。它使您能夠從命令列和其他腳本/應用程式批量檢查文檔,並將您自己的檢查器實例部署為服務(如 validator.w3.org/nu)。它的原始程式碼以及如何建置、測試和運行程式碼的說明都是可用的。
Dockerfile(請參閱下方的拉取 Docker 映像)以及 npm、pip 和 brew 套件也可用。
它以以下格式向上游發布:
包含嵌入式 Java 運行時的預編譯 Linux、Windows 和 macOS 二進位文件
vnu.jar
— 一個可攜式版本,您可以在安裝了 Java 11 或更高版本的任何系統上使用
vnu.war
— 用於透過 Servlet 容器(例如 Tomcat)部署檢查器服務
注意: vnu.jar和vnu.war檔案要求您安裝 Java 11 或更高版本。預先編譯的 Linux、Windows 和 macOS 二進位檔案根本不需要您安裝任何版本的 Java。
您可以取得最新版本或執行docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
、 npm install vnu-jar
、 npm install --registry=https://npm.pkg.github.com @validator/vnu-jar
、 brew install vnu
或pip install html5validator
並查看下面的使用和基於 Web 的檢查部分。或使用前端自動檢查文檔,例如:
用於 HTML 驗證的 Grunt 插件或用於 HTML 驗證的 Gulp 插件或用於 HTML 驗證的 Maven 插件
html5validator pip
套件(用於整合 Travis CI、CircleCI、CodeShip、Jekyll、Pelican 等)
LMVTFY:讓我為您驗證一下(自動檢查 JSFiddle/JSBin 等,GitHub 問題評論中的連結)
使用以下調用之一運行檢查器:
• vnu-runtime-image/bin/vnu OPTIONS FILES
(Linux 或 macOS)
• vnu-runtime-imagebinvnu.bat OPTIONS FILES
(Windows)
• java -jar ~/vnu.jar OPTIONS FILES
(任何安裝了 Java8+ 的系統)
…。其中FILES
是要檢查的文檔, OPTIONS
是以下選項中的零個或多個:
--errors-only --Werror --exit-zero-always --stdout --asciiquotes
--user-agent USER_AGENT --no-langdetect --no-stream --filterfile FILENAME
--filterpattern PATTERN --css --skip-non-css --also-check-css --svg
--skip-non-svg --also-check-svg --xml --html --skip-non-html
--format gnu|xml|json|text --help --verbose --version
下面的選項部分提供了每個選項的詳細信息,本節的其餘部分提供了一些具體示例。
注意:在這些範例中,將~/vnu.jar
替換為系統上該 jar 檔案的實際路徑,並將vnu-runtime-image/bin/vnu
和vnu-runtime-imagebinvnu.bat
替換為實際路徑系統上vnu
或vnu.bat
程式的路徑 - 或如果將vnu-runtime-image/bin
或vnu-runtime-imagebin
目錄新增至系統PATH
環境變數中,則可以只使用vnu
呼叫檢查器。
若要從命令列檢查一個或多個文件:
vnu-runtime-image/bin/vnu FILE.html FILE2.html FILE3.html...
vnu-runtime-imagebinvnu.bat FILE.html FILE2.html FILE3.html...
java -jar ~/vnu.jar FILE.html FILE2.html FILE3.html...
注意:如果呼叫檢查器時出現StackOverflowError
錯誤,請嘗試透過向 java 提供-Xss
選項來調整線程堆疊大小:
java -Xss512k -jar ~/vnu.jar ...
vnu-runtime-image/bin/java -Xss512k
-m vnu/nu.validator.client.SimpleCommandLineValidator ...
若要以 HTML 形式檢查特定目錄DIRECTORY_PATH
中的所有文件:
java -jar ~/vnu.jar DIRECTORY_PATH
vnu-runtime-image/bin/vnu DIRECTORY_PATH
vnu-runtime-imagebinvnu.bat DIRECTORY_PATH
注意:本節中的範例假設您的系統PATH
環境變數中有vnu-runtime-image/bin
或vnu-runtime-imagebin
目錄。如果您使用 jar 文件,請將範例中的vnu
替換為java -jar ~/vnu.jar
。
若要將特定目錄DIRECTORY_PATH
中的所有文件檢查為 HTML,但跳過名稱不以副檔名.html
、 .htm
、 .xhtml
或.xht
結尾的任何文件:
vnu --skip-non-html DIRECTORY_PATH
要將特定目錄中的所有文件檢查為 CSS:
vnu --css DIRECTORY_PATH
若要將特定目錄中的所有文件檢查為 CSS,但跳過名稱不以副檔名.css
結尾的任何文件:
vnu --skip-non-css DIRECTORY_PATH
要檢查特定目錄中的所有文檔,其中名稱以擴展名.css
結尾的文檔將被檢查為 CSS,所有其他文檔將被檢查為 HTML:
vnu --also-check-css DIRECTORY_PATH
若要將特定目錄中的所有文件檢查為 SVG:
vnu --svg DIRECTORY_PATH
若要將特定目錄中的所有文件檢查為 SVG,但跳過名稱不以副檔名.svg
結尾的任何文件:
vnu --skip-non-svg DIRECTORY_PATH
要檢查特定目錄中的所有文檔,其中名稱以擴展名.svg
結尾的文檔將被檢查為 SVG,而所有其他文檔將被檢查為 HTML:
vnu --also-check-svg DIRECTORY_PATH
若要檢查 Web 文件:
vnu _URL_
example: vnu http://example.com/foo
檢查標準輸入:
vnu -
example:
echo '<!doctype html><title>...' | vnu -
echo '<!doctype html><title>...' | java -jar ~/vnu.jar -
當按照本節所述從命令列使用時,檢查器提供以下選項:
Specifies whether ASCII quotation marks are substituted for Unicode smart
quotation marks in messages.
default: [unset; Unicode smart quotation marks are used in messages]
Specifies that only error-level messages and non-document-error messages are
reported (so that warnings and info messages are not reported).
default: [unset; all messages reported, including warnings & info messages]
Makes the checker exit non-zero if any warnings are encountered (even if
there are no errors).
default: [unset; checker exits zero if only warnings are encountered]
Makes the checker exit zero even if errors are reported for any documents.
default: [unset; checker exits 1 if errors are reported for any documents]
Makes the checker report errors and warnings to stdout rather than stderr.
default: [unset; checker reports errors and warnings to stderr]
Specifies a filename. Each line of the file contains either a regular
expression or starts with "#" to indicate the line is a comment. Any error
message or warning message that matches a regular expression in the file is
filtered out (dropped/suppressed).
default: [unset; checker does no message filtering]
Specifies a regular expression. Any error message or warning message that
matches the regular expression is filtered out (dropped/suppressed).
As with all other checker options, this option may only be specified once.
So to filter multiple error messages or warning messages, you must provide a
single regular expression that will match all the messages. The typical way
to do that for regular expressions is to OR multiple patterns together using
the "|" character.
default: [unset; checker does no message filtering]
Specifies the output format for reporting the results.
default: "gnu"
possible values: "gnu", "xml", "json", "text" [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#out
Shows detailed usage information.
Check documents as CSS but skip documents that don’t have *.css extensions.
default: [unset; all documents found are checked]
Force all documents to be checked as CSS, regardless of extension.
default: [unset]
Check documents as SVG but skip documents that don’t have *.svg extensions.
default: [unset; all documents found are checked]
Force all documents to be checked as SVG, regardless of extension.
default: [unset]
Skip documents that don’t have *.html, *.htm, *.xhtml, or *.xht extensions.
default: [unset; all documents found are checked, regardless of extension]
Forces any *.xhtml or *.xht documents to be parsed using the HTML parser.
default: [unset; XML parser is used for *.xhtml and *.xht documents]
Forces any *.html documents to be parsed using the XML parser.
default: [unset; HTML parser is used for *.html documents]
Check CSS documents (in addition to checking HTML documents).
default: [unset; no documents are checked as CSS]
Check SVG documents (in addition to checking HTML documents).
default: [unset; no documents are checked as SVG]
Specifies the value of the User-Agent request header to send when checking
HTTPS/HTTP URLs.
default: "Validator.nu/LV"
Disables language detection, so that documents are not checked for missing
or mislabeled html[lang] attributes.
default: [unset; language detection & html[lang] checking are performed]
Forces all documents to be be parsed in buffered mode instead of streaming
mode (causes some parse errors to be treated as non-fatal document errors
instead of as fatal document errors).
default: [unset; non-streamable parse errors cause fatal document errors]
Specifies "verbose" output. (Currently this just means that the names of
files being checked are written to stdout.)
default: [unset; output is not verbose]
Shows the checker version number.
Nu Html 檢查器 - 除了可用作獨立的命令列用戶端 - 還可以作為 HTTP 服務運行,類似於 validator.w3.org/nu,用於基於瀏覽器的 HTML 文件、CSS 樣式表和 SVG 圖像檢查通過網路。為此,該檢查器作為幾個單獨的包發布:
Linux、Windows 和 macOS 二進位文件,用於將檢查器部署為任何系統上的簡單獨立服務
vnu.jar
用於將檢查器部署為安裝了 Java 的系統上的簡單獨立服務
vnu.war
用於將檢查器部署到 servlet 容器(例如 Tomcat)
所有部署都公開一個 REST API,可以從其他用戶端(而不僅僅是 Web 瀏覽器)檢查 HTML 文件、CSS 樣式表和 SVG 圖像。 Linux、Windows 和 macOS 二進位檔案和vnu.jar
套件還包括一個簡單的 HTTP 用戶端,使您能夠將文件傳送到檢查器 HTTP 服務的本機執行實例(以進行快速命令列檢查)或傳送到任何遠端在Web 上任何位置執行的檢查器HTTP 服務的實例。
Linux、Windows 和 macOS 二進位檔案以及 vnu.jar 和 vnu.war 套件的最新版本可從 github 上的validator
專案取得。以下是使用它們的詳細說明。
注意:在這些說明中,將~/vnu.jar
替換為系統上該 jar 檔案的實際路徑,並將vnu-runtime-image/bin/java
和vnu-runtime-imagebinjava.exe
替換為實際路徑系統上檢查器java
或java.exe
程式的路徑 — 或者,如果您將vnu-runtime-image/bin
或vnu-runtime-imagebin
目錄新增至系統PATH
環境變數中,則可以只使用java nu.validator.servlet.Main 8888
調用檢查器java nu.validator.servlet.Main 8888
。
若要將檢查器作為獨立服務運行(使用內建 Jetty 伺服器),請開啟新的終端視窗並呼叫檢查器,如下所示:
java -cp ~/vnu.jar nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java nu.validator.servlet.Main 8888
vnu-runtime-imagebinjava.exe nu.validator.servlet.Main 8888
然後在瀏覽器中開啟http://0.0.0.0:8888。 (要偵聽不同的端口,請將8888
替換為端口號。)
警告:未來的檢查器版本將預設綁定到位址127.0.0.1
。除非您使用nu.validator.servlet.bind-address
系統屬性將檢查器綁定到不同的位址,否則您的檢查器部署可能會變得無法存取:
java -cp ~/vnu.jar
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
vnu-runtime-imagebinjava.exe
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
當您開啟 http://0.0.0.0:8888(或與您正在使用的nu.validator.servlet.bind-address
值相對應的任何URL)時,您將看到類似validator.w3.org/nu的表單它允許您輸入 HTML 文件、CSS 樣式表或 SVG 圖像的 URL,並在瀏覽器中顯示檢查該資源的結果。
注意:如果在使用檢查器時出現StackOverflowError
錯誤,請嘗試透過向 java 提供-Xss
選項來調整線程堆疊大小:
java -Xss512k -cp ~/vnu.jar nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java -Xss512k -m vnu/nu.validator.servlet.Main 8888
要在現有 servlet 容器(例如 Apache Tomcat)內執行檢查器,您需要按照其文件將vnu.war
檔案部署到該伺服器。例如,在 Apache Tomcat 上,您可以使用 Manager 應用程式或簡單地將檔案複製到webapps
目錄(因為這是預設的appBase
設定)來執行此操作。通常,您會在catalina.out
日誌檔案中看到類似以下內容的訊息。
May 7, 2014 4:42:04 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/vnu.war
假設您的 servlet 容器配置為接收發送到連接埠80
上的localhost
HTTP 請求,而此應用程式的上下文根是vnu
(通常預設行為是使用 WAR 檔案的檔案名稱作為上下文根,除非明確指定),您應該能夠透過連接到http://localhost/vnu/ 來存取應用程式。
注意:您可能需要自訂 WAR 檔案內的/WEB-INF/web.xml
檔案(可以使用任何 ZIP 處理程序)來修改 servlet 過濾器配置。例如,如果您想要停用 inbound-size-limit 篩選器,您可以像這樣註解掉該篩選器:
<!--
<filter>
<filter-name>inbound-size-limit-filter</filter-name>
<filter-class>nu.validator.servlet.InboundSizeLimitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>inbound-size-limit-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
該檢查器與HTTP 用戶端打包在一起,您可以從命令列使用該用戶端將文件傳送至檢查器HTTP 服務的本機執行實例(以進行快速命令列檢查)或傳送至Web 上任何位置的遠端實例。
若要使用已打包的 HTTP 用戶端在本機檢查文檔,請執行下列操作:
將檢查器作為本機 HTTP 服務啟動,如獨立 Web 伺服器部分所述。
開啟一個新的終端機視窗並呼叫 HTTP 用戶端,如下所示:
java -cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
vnu-runtime-image/bin/java nu.validator.client.HttpClient FILE.html...
若要將文件傳送至 Web 上的檢視器實例(例如 html5.validator.nu/),請使用 nu.validator.client.host 和 nu.validator.client.port 選項,如下所示:
java -cp ~/vnu.jar -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
……或者像這樣:
vnu-runtime-image/bin/java -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
其他選項記錄如下。
當使用打包的 HTTP 用戶端將文件傳送到檢查器 HTTP 服務的實例進行檢查時,您可以設定 Java 系統屬性來控制檢查器行為的設定選項。
例如,您可以透過將nu.validator.client.level
系統屬性的值設為error
來抑制警告等級訊息並僅顯示錯誤等級訊息,如下所示:
java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
……或者像這樣:
vnu-runtime-image/bin/java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
以下列出的大多數屬性會對應到檢查器服務的通用輸入參數,如 github.com/validator/validator/wiki/Service-»-Common-params 中所述。
Specifies the hostname of the checker for the client to connect to.
default: "127.0.0.1"
Specifies the hostname of the checker for the client to connect to.
default: "8888"
example: java -Dnu.validator.client.port=8080 -jar ~/vnu.jar FILE.html
Specifies the severity level of messages to report; to suppress
warning-level messages, and only show error-level ones, set this property to
"error".
default: [unset]
possible values: "error"
example: java -Dnu.validator.client.level=error -jar ~/vnu.jar FILE.html
Specifies which parser to use.
default: "html"; or, for *.xhtml input files, "xml"
possible values: [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#parser
Specifies the encoding of the input document.
default: [unset]
Specifies the content-type of the input document.
default: "text/html"; or, for *.xhtml files, "application/xhtml+xml"
Specifies the output format for messages.
default: "gnu"
possible values: [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#out
Specifies whether ASCII quotation marks are substituted for Unicode smart
quotation marks in messages.
default: "yes"
possible values: "yes" or "no"
Binds the validator service to the specified IP address.
default: 0.0.0.0 [causes the checker to listen on all interfaces]
possible values: The IP address of any network interface
example: -Dnu.validator.servlet.bind-address=127.0.0.1
Specifies the connection timeout.
default: 5000
possible values: number of milliseconds
example: -Dnu.validator.servlet.connection-timeout=5000
Specifies the socket timeout.
default: 5000
possible values: number of milliseconds
example: -Dnu.validator.servlet.socket-timeout=5000
您可以從 GitHub 容器註冊表中的 https://ghcr.io/validator/validator 提取檢查器 Docker 映像。
要拉取並運行最新版本的檢查器:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
從容器註冊表中提取並執行檢查器的特定標籤/版本 - 例如17.11.1
版本:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:17.11.1
要將檢查器綁定到特定位址(而不是讓它偵聽所有介面):
docker run -it --rm -p 128.30.52.73:8888:8888
ghcr.io/validator/validator:latest
若要使檢查器以不同於預設 5 秒的連線逾時和套接字逾時執行,請使用CONNECTION_TIMEOUT_SECONDS
和SOCKET_TIMEOUT_SECONDS
環境變數:
docker run -it --rm
-e CONNECTION_TIMEOUT_SECONDS=15
-e SOCKET_TIMEOUT_SECONDS=15
-p 8888:8888
validator/validator
若要讓檢查器在設定特定 Java 系統屬性的情況下執行,請使用JAVA_TOOL_OPTIONS
環境變數:
docker run -it --rm
-e JAVA_TOOL_OPTIONS=-Dnu.validator.client.asciiquotes=yes
-p 8888:8888
validator/validator
若要定義名為vnu
的服務以與docker compose
一起使用,請建立一個名為docker-compose.yml
的 Compose 檔案(例如),其內容如下:
version: '2' services:
vnu:
image: validator/validator ports:
- "8888:8888"
network_mode: "host" #so "localhost" refers to the host machine.
請依照下列步驟建置、測試和執行檢查器,以便您可以在 Web 瀏覽器中開啟http://0.0.0.0:8888/
以使用檢查器 Web UI。
確保您安裝了 git、python 和 JDK 8 或更高版本。
設定JAVA_HOME
環境變數:
匯出JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 <-- Ubuntu等
導出 JAVA_HOME=$(/usr/libexec/java_home) <-- MacOS
建立工作目錄:
git 克隆 https://github.com/validator/validator.git
變更到您的工作目錄:
CD驗證器
啟動檢查器 Python 腳本:
python ./checker.py 全部
第一次執行檢查器 Python 腳本時,您需要連網,並且建置需要時間來下載幾兆位元組的依賴項。
上述步驟將建置、測試並執行檢查器,以便您可以在 Web 瀏覽器中開啟http://0.0.0.0:8888/
以使用檢查器 Web UI。
警告:未來的檢查器版本將預設綁定到位址127.0.0.1
。除非您使用--bind-address
選項將檢查器綁定到不同的位址,否則您的檢查器部署可能會變得無法存取:
python ./checker.py --bind-address=128.30.52.73 all
使用python ./checker.py --help
查看用於控制腳本行為的命令列選項,以及可以單獨呼叫的建置目標名稱;例如:
python ./checker.py build # 僅構建
python ./checker.py build test # 建置與測試
python ./checker.py run # 僅運行
python ./checker.py jar # 編譯 vnu.jar
python ./checker.py 更新淺 &&
python ./checker.py dldeps &&
python ./checker.py jar # 更快地編譯 vnu.jar