【问题标题】:How to encode special chars in html content如何在 html 内容中编码特殊字符
【发布时间】:2023-03-30 11:19:01
【问题描述】:

在 Java 中,是否有可用的第三方资源或快速命令将字符串中的 html 特殊字符转换为 html 编码内容?

例如:

Original code:     <>&abcdef ©
After encoding:    &lt;&gt;&amp;abcdef&copy;

【问题讨论】:

  • 如果你有这样的输入(HTML 与未转义的非 HTML 混合),你可能已经被淹没了。转义 HTML 特殊字符专门用于避免与真正的 HTML 产生歧义,这在以后可能无法解决。
  • 上面的例子不能完全照原样完成。您的文本不是有效的 HTML,您将找不到工具,也无法编写正确处理无效 HTML 的程序,因为您无法正确定义正确的行为。

标签: java html


【解决方案1】:

如果您想将字符串转换为 HTML 实体以快速测试某些内容,您可以使用这样的 web 服务:

http://www.primitivetype.com/resources/htmlentities.php

[编辑] 对于 Java,您可以使用 Apache Commons Lang 的 StringEscapeUtils。看到这个线程: Recommended method for escaping HTML in Java

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml; 
// ... 
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = escapeHtml(source);

我从上面提到的线程中借用了示例。

【讨论】:

  • 如果你想用代码来做,你必须告诉我们你正在使用哪种编程语言
  • 我认为它会将所有
【解决方案2】:

这是旧的,但它还没有一个公认的答案。这是我的纯 java 版本:

public String toHTML(String str) {
    String out = "";
    for (char c: str.toCharArray()) {
        if(!Character.isLetterOrDigit(c))
            out += String.format("&#x%x;", (int)c);
        else
            out += String.format("%s", c);

    }
    return out;
}

适用于 html5 和 utf-8。

【讨论】:

    【解决方案3】:

    转换

    > → >

    ' → '

    " → "

    & → &

    知识来源:https://www.php.net/manual/en/function.htmlspecialchars.php

    【讨论】:

    • 您可以轻松地用javascript或任何语言实现它。
    • 谢谢!我只是在寻找这个等价的“表”......不幸的是,链接已损坏,但主要字符在那里:)
    • @LeonardoAlvesMachado 感谢您的报告。修复了链接。
    【解决方案4】:

    Javascript 解决方案: 在这里找到工作小提琴: http://jsfiddle.net/ezmilhouse/Zb5C9/1/

    ===

    示例使用了从 php.js 中借用的 2 个函数:

    get_html_translation_table()

    https://github.com/kvz/phpjs/raw/master/functions/strings/get_html_translation_table.js

    htmlentities()

    https://github.com/kvz/phpjs/raw/master/functions/strings/htmlentities.js

    【讨论】:

      【解决方案5】:

      这里有一些 java 代码尽可能地复制 PHP 的默认 htmlspecialchars(str):

      首先让我们看看 PHP 的 htmlspecialchars(str) 是如何工作的:

      php> echo htmlspecialchars("abc\ndef");
      abc
      def
      php> echo htmlspecialchars("abc&def");
      abc&amp;def
      php> echo htmlspecialchars("abc<>\"&def");
      abc&lt;&gt;&quot;&amp;def
      php> echo htmlspecialchars("abc<>\"&d'ef");
      abc&lt;&gt;&quot;&amp;d'ef
      php> echo htmlspecialchars("abc<   >\"&d'ef");
      abc&lt;   &gt;&quot;&amp;d'ef
      php> echo htmlspecialchars("abc def");
      abc def
      php>
      

      注意事项:

      1. 空格和换行符保持原样。
      2. 每个实例都会替换一次定义的实体。
      3. 版权© 和欧元符号 等额外的标记保持原样。

      代码:

      public class Main{
          public static void main(String[] args) {
              System.out.println("'" + stringToHtmlString("&") + "'");
              System.out.println("'" + stringToHtmlString("<") + "'");
              System.out.println("'" + stringToHtmlString(">") + "'");
              System.out.println("'" + stringToHtmlString(" ") + "'");
              System.out.println("'" + stringToHtmlString("     ") + "'");
              System.out.println("'" + stringToHtmlString("&<>abc") + "'");
              System.out.println("'" + stringToHtmlString("abc&<>") + "'");
          }
          public static final String stringToHtmlString(String s){
             StringBuffer sb = new StringBuffer();
             int n = s.length();
             for (int i = 0; i < n; i++) {
                char c = s.charAt(i);
                switch (c) {
                   case '<': sb.append("&lt;"); break;
                   case '>': sb.append("&gt;"); break;
                   case '&': sb.append("&amp;"); break;
                   case '"': sb.append("&quot;"); break;
                   default:  sb.append(c); break;
                }
             }
             return sb.toString();
          }
      }
      

      哪些打印:

      eric@dev ~ $ java Main
      '&amp;'
      '&lt;'
      '&gt;'
      ' '
      '     '
      '&amp;&lt;&gt;abc'
      'abc&amp;&lt;&gt;'
      

      它不是 PHP 的 htmlspecialchars(str) 函数的完美克隆,但对我来说已经足够接近了。

      这是另一个对混淆字符集进行 html 实体转换的方法:http://www.rgagnon.com/javadetails/java-0306.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        相关资源
        最近更新 更多