我有这种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 , if you do that you loss
// word breaking
if (lastWasBlankChar) { // NOT going into this loop
lastWasBlankChar = false;
sb.append(" ");
}
else {
lastWasBlankChar = true;
sb.append(' ');
}
}
else {
lastWasBlankChar = false;
//
// HTML Special Chars
if (c == '"')
sb.append(""");
else if (c == '&')
sb.append("&");
else if (c == '<')
sb.append("<");
else if (c == '>')
sb.append(">");
else if (c == '\n')
// Handle Newline
sb.append("<br/>");
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();
}
当我用字符串“bo y”传递它时,它返回“bo y”。当我将输入字符串更改为“bo&gt; y”时,它正确地转义字符串。任何想法为什么空间逃逸不起作用?
感谢。
答案 0 :(得分:1)
根据您的评论判断,我相信你想要转义一个字符串,用于音乐网站API的URL。
我必须建议您利用第三方库。
您可以使用: java.net.URLEncoder.encode(String s,String encoding)
e.g。
URLEncoder.encode(searchQuery, "UTF-8");
答案 1 :(得分:0)
看起来堆栈溢出可能已经转义了你的第二个字符串 是第二个“男孩”假设是 “bo&amp; nbsp; y”。
答案 2 :(得分:0)
当我运行它时工作正常,我得到:
stringToHTMLString("This is a multi-space test")
This is a multi-space test
嗯,既然我想到了,你是否期望第一个空间被逃脱?遵循逻辑,它首先以空格开始,然后以不间断的空格交替开始,因为它最初是假的。
这不能回答你的实际问题,但更好的方法是做你想做的事情就是在元素上使用CSS white-space: pre-wrap;
...如果你可以躲开支持IE8 +。否则,对于较旧的IE,您必须使用
white-space: normal !important;
white-space: pre-wrap;
word-wrap: break-word;
您对7位安全字符的定义也很有趣。可能最好使用UTF-8,除非你必须支持Windows 98,而不是手动转义异常字符,并且可能完全丢弃非格式化控制代码。