0

我有这个 HTML 转义方法:

public static String stringToHTMLString(String string) {
    StringBuffer sb = new StringBuffer(string.length());
    // true if last char was blank
    boolean lastWasBlankChar = false;
    int len = string.length();
    char c;

    for (int i = 0; i < len; i++)
        {
        c = string.charAt(i);
        if (c == ' ') {
            // blank gets extra work,
            // this solves the problem you get if you replace all
            // blanks with &nbsp;, if you do that you loss 
            // word breaking
            if (lastWasBlankChar) { // NOT going into this loop
                lastWasBlankChar = false;
                sb.append("&nbsp;");
                }
            else {
                lastWasBlankChar = true;
                sb.append(' ');
                }
            }
        else {
            lastWasBlankChar = false;
            //
            // HTML Special Chars
            if (c == '"')
                sb.append("&quot;");
            else if (c == '&')
                sb.append("&amp;");
            else if (c == '<')
                sb.append("&lt;");
            else if (c == '>')
                sb.append("&gt;");
            else if (c == '\n')
                // Handle Newline
                sb.append("&lt;br/&gt;");
            else {
                int ci = 0xffff & c;
                if (ci < 160 )
                    // nothing special only 7 Bit
                    sb.append(c);
                else {
                    // Not 7 Bit use the unicode system
                    sb.append("&#");
                    sb.append(new Integer(ci).toString());
                    sb.append(';');
                    }
                }
            }
        }
    return sb.toString();
}

当我用字符串“boy y”传递它时,它返回“boy y”。当我将输入字符串更改为“bo>y”时,它正确地转义了字符串。知道为什么空间逃逸不起作用吗?

谢谢。

4

3 回答 3

1

当我运行它时工作正常,我得到:

stringToHTMLString("This is  a   multi-space      test")
This is &nbsp;a &nbsp; multi-space &nbsp; &nbsp; &nbsp;test

嗯,现在我想起来了,您是否期望第一个空间被逃脱?按照逻辑,它首先以空格开头,然后交替使用不间断空格,因为它最初是错误的。

这并不能回答您的实际问题,但是做您想做的事情的更好方法是white-space: pre-wrap;在元素上使用 CSS……如果您可以摆脱支持 IE8+ 的话。否则,对于较旧的 IE,您必须使用

white-space: normal !important;
white-space: pre-wrap;
word-wrap: break-word;

您对 7 位安全字符的定义也很有趣。除非您必须支持 Windows 98,否则使用 UTF-8 可能会更好,而不是手动转义不寻常的字符,并且可能完全删除非格式化控制代码。

于 2012-07-28T00:43:55.437 回答
1

从您的评论来看,我相信您想转义一个字符串以在音乐网站 API 的 URL 中使用。

我必须建议您利用 3rd 方库。

您可以使用:      java.net.URLEncoder.encode(String s, String encoding)

例如

URLEncoder.encode(searchQuery, "UTF-8");

来源:用 Java 编码 URL 查询参数

于 2012-07-28T01:57:19.990 回答
0

看起来堆栈溢出可能已经逃脱了您的第二个字符串。
第二个“男孩”应该是“bo y”。?

于 2012-07-28T00:39:46.517 回答