Java如何将单引号和双引号编码为HTML实体?

2024-02-14

我该如何编码" into " and ' into ' ?

我很惊讶 HTML Entities 4.0 中没有定义单引号和双引号,所以StringEscapeUtils无法将这两个字符转义到各自的实体中。

还有其他与字符串相关的工具可以做到这一点吗?

HTML Entities 4.0 中没有定义单引号和双引号的原因是什么?

除了单引号和双引号之外,是否有任何框架能够将所有 unicode 字符编码为各自的实体?既然所有的unicode都可以手动转换成十进制实体并在HTML中显示,所以想知道有没有什么工具可以自动转换它?


  1. HTML 4.0 中未定义单引号和双引号

HTML 4.0 中未定义单引号,双引号定义为"开始HTML2.0

  1. StringEscapeUtils 无法将这 2 个字符转义到各自的实体中

escapeXml11 in StringEscapeUtils supports http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html将单引号转换为'.

例如:

StringEscapeUtils.escapeXml11("'"); //Returns '
StringEscapeUtils.escapeHtml4("\""); //Returns "
  1. 还有其他与字符串相关的工具可以做到这一点吗?

HTML实用程序 http://docs.spring.io/spring-framework/docs/3.2.3.RELEASE/javadoc-api/org/springframework/web/util/HtmlUtils.htmlSpring框架负责处理单引号和双引号,它还将值转换为十进制(例如' & ")。 以下示例取自此问题的答案question https://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java:

import org.springframework.web.util.HtmlUtils;
[...]
HtmlUtils.htmlEscapeDecimal("&")` //gives &
HtmlUtils.htmlEscape("&")` //gives &
  1. HTML Entities 4.0 中没有定义单引号和双引号的原因是什么?

As per HTML 4 中的字符实体引用 http://www.w3.org/TR/html4/sgml/entities.html单引号未定义。从 HTML2.0 开始可以使用双引号。而支持单引号作为XHTML1.0 http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML.

  1. 将所有 unicode 字符编码为相应实体的工具或方法

作为对此问题的答案的一部分,提到了一个非常好且简单的java实现question https://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java?answertab=oldest#tab-top.

以下是基于该答案的示例程序:

import org.apache.commons.lang3.StringEscapeUtils;

public class HTMLCharacterEscaper {
    public static void main(String[] args) {        
        //With StringEscapeUtils
        System.out.println("Using SEU: " + StringEscapeUtils.escapeHtml4("\" ¶"));
        System.out.println("Using SEU: " + StringEscapeUtils.escapeXml11("'"));

        //Single quote & double quote
        System.out.println(escapeHTML("It's good"));
        System.out.println(escapeHTML("\" Grit \""));

        //Unicode characters
        System.out.println(escapeHTML("This is copyright symbol ©"));
        System.out.println(escapeHTML("Paragraph symbol ¶"));
        System.out.println(escapeHTML("This is pound £"));      
    }

    public static String escapeHTML(String s) {
        StringBuilder out = new StringBuilder(Math.max(16, s.length()));
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&' || c == '\'') {
                out.append("&#");
                out.append((int) c);
                out.append(';');
            } else {
                out.append(c);
            }
        }
        return out.toString();
    }

}

以下是我在寻求答案时遇到的一些有趣的链接:

  • 用于排版的常见 HTML 实体 http://www.w3.org/wiki/Common_HTML_entities_used_for_typography
  • 为什么不应该'用于转义单引号? https://stackoverflow.com/questions/2083754/why-shouldnt-apos-be-used-to-escape-single-quotes
  • 命名角色参考' http://www.w3.org/TR/xhtml1/#C_16
  • HTML 撇号 https://stackoverflow.com/questions/419718/html-apostrophe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java如何将单引号和双引号编码为HTML实体? 的相关文章

随机推荐

  • Leaflet.js:是否可以按属性过滤geoJSON特征?

    我环顾四周 看到很多有关如何显示 隐藏图层的信息 这很酷 但由于我可以向 GeoJSON 功能添加任意属性 所以我希望能够相应地过滤它们 例如 如果我的特征 1 2 和 3 具有以下属性 小 红色 甜的 大 绿色 酸的 小 红色 热的 我如
  • docker compose up 工作正常,但浏览器显示无法访问站点

    docker compose up显示这个 Recreating tutorial product service 1 Recreating tutorial product service 1 done Attaching to tuto
  • ant中设置类路径的问题

    我在运行 Java 程序时遇到问题 它使用一些第三方 JAR 我可以很好地编译它 但是当我在 ant 中调用我的运行目标时 它说它找不到我告诉它在类路径中运行的类 我的 build xml 如下所示
  • 为什么解构赋值不知道空值是假值并使用默认值? [复制]

    这个问题在这里已经有答案了 假设我们有一个函数使用参数内部对象中的一些键 const api data name gt My name is name 如果我们通过 data data 0 data NaN or data undefine
  • 无法在 WCF C# 中接收 xml post 请求值

    我正在试验 WCF 并构建了一个带有 id 和 name 参数的标准产品类 我的目标是从休息中接收它 并返回状态 DataContract public partial class Product DataMember public int
  • 如何在网页上嵌入 mjpeg 文件

    我需要将 IP 摄像机的输出显示到网页 以便最终用户可以使用此页面从该摄像机查看实时内容 它有一个为捕获的视频提供 mjpeg 输出的界面 我需要将其嵌入到我的网页上 它至少应该可以在 Firefox Safari 和 IE 上运行 提前致
  • 当选项比屏幕尺寸长时,iOS 7 不会显示多于一行

    iOS 7 在 html 中不显示多于一行options
  • 如何在Unity3D中用C#制作延迟?

    我刚刚开始学习unity c 我遵循了教程 但我想添加一些东西 using UnityEngine using UnityEngine UI using System Collections public class PlayerContr
  • 一条指令清除 PF(奇偶校验标志)——获取结果寄存器中的奇数位

    在x86汇编中 是否可以在一条且只有一条指令中清除奇偶校验标志 在any初始寄存器配置 这相当于创建一个结果寄存器odd位数 以及任何设置标志的操作 明确排除mov 相比之下 设置奇偶校验标志可以在一条指令中完成 cmp bl bl 清除奇
  • Django 反序列化

    我收到以下错误 回溯 最近一次调用最后一次 文件 tests py 第 92 行 位于 test single search 对于serializers deserialize中的return obj json response ensur
  • 无法从资源加载定义

    我有一个 希望 非常基本的问题 我对 Ant 非常不熟悉 我只是尝试使用构建文件 以便为我最近发现的开源应用程序 Rapid Miner 编写一些插件 我一直在尝试使用 Eclipse 来编译它 遵循 Eclipses org 自己的说明
  • 是否有 UTF-16 字符串类型的 Rust 库? (用于编写 Javascript 解释器)

    For most程序 最好内部使用 UTF 8 http utf8everywhere org 并在必要时转换为其他编码 但就我而言 我想编写一个 Javascript 解释器 并且仅存储 UTF 16 字符串 或数组 要简单得多u16 因
  • ARKit根据触摸位置设置ARAnchor变换

    我正在 XCode 9 上使用 AR 入门应用程序 其中在点击场景中创建锚点 override func touchesBegan touches Set
  • 将原始帧转换为 webm 直播流

    我有一个 ASP NET 应用程序 其设置如下 以 656x492 分辨率捕获原始 RGB 帧的相机 这些帧在我的 C 代码中进行处理 带有一些简单的图像 加工 原始图像存储在字节数组中 以及包装在位图容器中 缺少魔法 将原始图像缓冲区转换
  • SVG 检测“fill: none”上的 Onclick 事件

    当我创建一个 svg 矩形时fill black my onclick事件处理程序被调用 当我更换fill black with fill none 当我在矩形内单击时 不会调用我的事件处理程序 而仅在单击border直肠的 我需要更改什么
  • GLSL 片段位置

    在我的 cpp 代码中 我创建了一个四边形列表 其中一些有一个标志 在像素着色器中 我检查是否设置了该标志 如果未设置标志 则四边形将变为红色 例如 如果设置了标志 我想决定每个像素的颜色 所以如果我需要将标记的四边形的一半着色为红色 另一
  • 如何解决 django 管理错误 302 问题?

    我在尝试登录 django 管理页面时不断收到错误 Watching for file changes with StatReloader Performing system checks System check identified n
  • Create React App 提供的react-scripts包需要依赖:

    项目依赖树可能有问题 这可能不是 Create React App 中的错误 而是您需要在本地修复的问题 Create React App 提供的react scripts包需要依赖 babel eslint 9 0 0 不要尝试手动安装它
  • 绑定到窗口高度和宽度的问题

    当我尝试将窗口的高度和宽度绑定到视图模型中的属性时 遇到一些问题 这是一个小示例应用程序来说明该问题 这是app xaml xs中的代码 public partial class App Application protected over
  • Java如何将单引号和双引号编码为HTML实体?

    我该如何编码 into 34 and into 39 我很惊讶 HTML Entities 4 0 中没有定义单引号和双引号 所以StringEscapeUtils无法将这两个字符转义到各自的实体中 还有其他与字符串相关的工具可以做到这一点