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