#逃逸 #字符串 #HTML

escapade

escapade 提供字符串连接和写入功能,但在过程中会自动转义数据中的任何 HTML,这可以防止意外地将未转义的字符串写入输出。

3 个版本

使用旧的 Rust 2015

0.0.3 2016 年 11 月 8 日
0.0.2 2016 年 11 月 8 日
0.0.1 2016 年 11 月 5 日

#10 in #strings

22 每月下载量

MIT 许可证

10KB
143

escapade - 类型辅助 HTML 安全性

escapade 受 ActiveSupports SafeBuffer 的启发。

escapade 提供字符串连接和写入功能,但在过程中会自动转义数据中的任何 HTML,这可以防止意外地将未转义的字符串写入输出。

该库提供了一种用于 HTML 安全连接的 String 类型和一个包装实现 Write 的 writer。

该库与任何实现 AsRef<str> 的类型一起工作。

您可能希望为模板语言使用此库 ;).

使用方法

将以下内容放入您的 dependencies 部分的 Cargo.toml

escapade = "0.0.2"

写入模式

使用 SafeWriter 结构体将任何实现 Write 的类型转换为 HTML 安全。

extern crate escapade;

use escapade::EscapedWriter;
use escapade::EscapedWrite;

fn main() {
    let mut buffer = EscapedWriter::new(vec![]);

    buffer.write_str("<hello>&world</hello>").expect("write should not fail");
    assert_eq!("&lt;hello&gt;&amp;world&lt;&#x2F;hello&gt;", String::from_utf8(buffer.into_inner()).unwrap());
}

字符串模式

将未转义的字符串追加到任何转义字符串中会转义第二个字符串。

extern crate escapade;

use escapade::Append;
use escapade::Escapable;

fn main() {
    let mut s = String::from("<hello>").escape();
    s.append_str(String::from("&world</hello>"));

    assert_eq!("&lt;hello&gt;&amp;world&lt;&#x2F;hello&gt;", s.into_inner());
}

转义字符串不能追加到普通字符串。

选择安全性

有时,您确定某个字符串是安全的(例如,您手动创建了它)。在这种情况下,您可以选择进入安全性,以避免转义

extern crate escapade;

use escapade::Escapable;
use escapade::EscapedWriter;
use escapade::EscapedWrite;

fn main() {
    let mut buffer = EscapedWriter::new(vec![]);

    buffer.write_str("<hello>&world</hello>".safe()).expect("write should not fail");
    assert_eq!("<hello>&world</hello>", String::from_utf8(buffer.into_inner()).unwrap());
}

待办事项

  • 再考虑一下接口
  • 升级到 1.0.0

许可证

MIT

致谢

编码功能来自 rust-htmlescape,由 Viktor Dahl 提供,许可证为 MIT。

无运行时依赖

~150KB