Dizeyi, bir web belgesinde düzgün görüntülenecek bir dizeye dönüştürmenin bir yolu var mı? Örneğin,Java'da HTML özel karakterleri nasıl önlenir?
"<Hello>"
Dizeyi, bir web belgesinde düzgün görüntülenecek bir dizeye dönüştürmenin bir yolu var mı? Örneğin,Java'da HTML özel karakterleri nasıl önlenir?
"<Hello>"
StringEscapeUtils
için dize
"<Hello>"
değişen bunun için tam olarak tasarlanmış işlevi vardır:
genellikle "HTML kaçan" denir. Bunu yapmak için standart kütüphanelerdeki herhangi bir şeyden haberdar değilim (ancak XML çıkışını kullanarak bunu tahmin edebilirsiniz). Bununla birlikte, bunu yapabilecek çok sayıda üçüncü taraf kütüphanesi vardır. Org.apache.commons.lang adresinden gelen StringEscapeUtils, bunu yapabilen bir escapeHtml
yöntemine sahiptir.
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) {
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();
}
Unicode ek karakterleri, bir String'de 2 karakter olarak kodlanır ve bu doğru bir şekilde işlenmeyecektir. Unicode'u desteklemek için gerçekten de kodlarla değil, kodlarla ilgilenmeniz gerekir. – Jakub
Hey, bunun eski bir q olduğunu biliyorum, ama merak ediyorum - neden String.replaceAll() yöntemi karakterleri tek tek yerine geçmek yerine işe yaramaz? –
htmlentities statik yöntemlerden bir koleksiyon içeren bir açık kaynak Java sınıfı olan (htmlentities, unhtmlentities, ...) HTML entitities ve tersi içine özel ve genişletilmiş karakterleri dönüştürmek.
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
Bu bağlantı artık çalışmıyor. Sınıfı burada bulabilirsiniz http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html ve onu içeren proje burada http: // commons.apache.org/proper/commons-lang/ – Jakub
@Jakub Teşekkürler. Yayını yeni URL ile güncellendi. – Amber