#escaping #html #entities #codec #decode #html-text

htmlize

按照标准在UTF-8中编码和解码HTML实体

9个版本 (稳定版)

1.0.5 2024年3月15日
1.0.4 2024年2月19日
1.0.3 2023年7月10日
1.0.2 2023年3月4日
0.1.0 2019年12月12日

#102编码

Download history 3258/week @ 2024-05-03 4824/week @ 2024-05-10 4324/week @ 2024-05-17 4048/week @ 2024-05-24 3342/week @ 2024-05-31 3534/week @ 2024-06-07 4428/week @ 2024-06-14 3400/week @ 2024-06-21 2571/week @ 2024-06-28 1899/week @ 2024-07-05 2391/week @ 2024-07-12 3663/week @ 2024-07-19 5567/week @ 2024-07-26 3582/week @ 2024-08-02 5322/week @ 2024-08-09 3582/week @ 2024-08-16

19,381 每月下载量
用于 9 个crate (6个直接使用)

MIT/Apache

72KB
947

按照标准编码和解码HTML实体

docs.rs Crates.io Rust version 1.60+

如果您只需将文本转义以嵌入HTML中,则安装只需运行

cargo add htmlize

如果您要将实体转换回原始文本,请参阅下面的将实体转换回文本

将文本转义为实体

escape 函数应该涵盖大多数您需要安全地将字符串嵌入HTML的情况。通常,如果文本用于属性中,请使用 escape_attribute(),否则请使用 escape_text()

& < > " '
escape_text()
escape_attribute()
escape_all_quotes()

几乎不需要使用 escape_all_quotes(),但它包括在内,因为有时将属性值用单引号括起来很方便。

escape_text(string) ->string

转义字符串以便它可以嵌入主文本。这不会转义任何引号。

参考。另请参阅 escape_text_bytes()

escape_attribute(string) ->string

转义字符串以便它可以嵌入属性中。属性始终使用双引号。

参考。另请参阅 escape_attribute_bytes()

escape_all_quotes(string) ->string

转义字符串中的单引号和双引号以及其他标准字符。通常您不需要使用此功能。

参考。另请参阅 escape_all_quotes_bytes()

将实体转换为文本

这需要 unescapeunescape_fast 功能。(unescape 构建速度更快,所以除非你真的需要非常快的转换,否则请使用它。)要配置它

cargo add htmlize --features unescape

unescape(string) ->string

这遵循了 官方 WHATWG 算法来扩展一般实体。

严格来说,这并不能正确处理来自属性值的文本。对于大多数用途来说,这可能是可以接受的,但如果你知道输入字符串来自属性值,请使用 unescape_attribute() 代替。有关更多信息,请参阅 unescape_in() 参考文档

参考.

unescape_attribute(string) ->string

这遵循了 官方 WHATWG 算法来扩展属性值中找到的实体。

唯一的区别在于如何处理不带尾随分号的命名实体。有关更多信息,请参阅 unescape_in() 参考文档

参考.

unescape_in(string, Htmlize::上下文) ->string

这遵循了 官方 WHATWG 算法来根据实体所在的上下文扩展实体。有关更多信息,请参阅 参考文档

参考.

unescape_bytes_in([u8], Htmlize::上下文) -> [u8]

这与 unescape_in() 相同,但它对字节而不是字符串进行操作。(注意,这两个函数实际上都接收并返回 Cow。)

参考.

特性

escape 函数在没有启用任何特性时都可用。

  • unescape_fast:提供 unescape() 的快速版本。这不会自动启用 entities 特性。

    这的构建时间可能比 unescape 多 30 秒,但最坏情况下的性能显著更好。话虽如此,unescape 版本的性能已经相当不错,所以我建议除非你真的需要它,否则不要启用这个特性。

  • unescape:提供 unescape() 的正常版本。这将自动启用 entities 特性。

  • entities:构建 ENTITIES 映射。启用此功能将在构建时添加对 phf 的依赖,并可能使构建速度慢几秒。

所有其他特性都是内部的,在指定依赖时不应该使用。请参阅 参考文档

基准测试

本文件包含两组基准测试。一组是使用criterion进行的典型多运行基准测试。这些测试可以通过cargo benchcargo criterion(如果已安装)来运行。

要在unescape函数上运行基准测试,请启用benchunescapeunescape_fast(或两者)功能。

注意: 内部bench功能是必需的,以便将内部函数如unescape_fast()unescape_slow()暴露给基准测试。在指定依赖项时,不要启用此功能,因为其行为可能从点发布到点发布不保持一致。

iai基准测试

另一组基准测试使用iai来计数指令、缓存访问并估算周期。它需要启用内部iai功能,并且仅在Linux上运行良好。

在本地运行iai基准测试

cargo bench --features iai iai

您可能需要使用--all-features--features iai,bench,unescape--features iai,bench,unescape_fast来启用unescape函数的基准测试。

在Docker容器中运行,请使用docker.sh脚本。如果需要,它将构建一个镜像,然后在所有未来的运行中使用该镜像

./docker.sh cargo bench --features iai iai

您还可以以交互模式启动它,并多次运行基准测试

./docker.sh
root@d0a0db46770d:/work# cargo bench --features iai iai
   Compiling htmlize [...]

开发状态

这是稳定的。我没有计划添加新功能,尽管我欢迎建议

许可证

此项目采用Apache 2和MIT许可证双重授权。您可以选择使用其中任何一个。

entities.json文件版权属于WHATWG,并从https://html.whatwg.com.cn/entities.json复制。它根据BSD 3-Clause许可证授权。

贡献

除非您明确声明,否则您提交的任何贡献,根据Apache 2.0许可证定义,均应如上所述双重授权,不附加任何额外的条款或条件。

依赖项

~110–305KB