如何在HTML内容中编码特殊字符

16

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

例如:

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

如果你的输入是这样的(混合了HTML和未转义的非HTML内容),那么你已经可能遇到了麻烦。转义HTML特殊字符的目的是为了避免与真正的HTML产生歧义,后期可能无法解决。 - deceze
以上示例不能完全按照它的方式进行。您的文本不是有效的HTML,因此您将无法找到工具并且无法编写可以在非有效HTML上正常工作的程序,因为您无法正确定义适当的行为。 - Notinlist
1
可能是重复的问题: https://dev59.com/aHM_5IYBdhLWcg3wslfs - das_weezul
5个回答

11

如果您想快速将字符串转换为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);

我从上述线程借用了这个示例。


如果你想在代码中完成它,你必须告诉我们你使用的编程语言是什么。 - das_weezul
我认为它会将所有的<替换为<,但我不希望 div 中的小于符号被更改。 - Roshan

5

虽然这篇文章有些旧,但是它还没有被接受的答案。以下是我使用纯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,表现良好。


4

您可以轻松地在JavaScript或任何其他编程语言中实现它。 - Notinlist
谢谢!我只是在寻找这个等价“表”……不幸的是,链接已经失效了,但主要字符还在那里 :) - Leonardo Alves Machado
1
@LeonardoAlvesMachado 感谢您的反馈。链接已修复。 - Notinlist

2

1

这里有一些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. 版权符号©和欧元符号等额外的 Wingdings 保持不变。

代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接