Class SafeHtmlBuilder
StringBuilder
; unlike a
StringBuilder
, it automatically HTML-escapes appended input where
necessary.
In addition, it supports methods that allow strings with HTML markup to be
appended without escaping: One can append other SafeHtml
objects, and
one can append constant strings. The method that appends constant strings
(appendHtmlConstant(String)
) requires a convention of use to be
adhered to in order for this class to adhere to the contract required by
SafeHtml
: The argument expression must be fully determined and known
to be safe at compile time, and the value of the argument must not contain
incomplete HTML tags. See appendHtmlConstant(String)
for details.
The accumulated XSS-safe HTML can be obtained in the form of a
SafeHtml
via the toSafeHtml()
method.
This class is not thread-safe.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionappend
(boolean b) Appends the string representation of a boolean.append
(byte num) Appends the string representation of a number.append
(char c) Appends the string representation of a char.append
(double num) Appends the string representation of a number.append
(float num) Appends the string representation of a number.append
(int num) Appends the string representation of a number.append
(long num) Appends the string representation of a number.Appends the contents of anotherSafeHtml
object, without applying HTML-escaping to it.appendEscaped
(String text) Appends a string after HTML-escaping it.appendEscapedLines
(String text) Appends a string consisting of several newline-separated lines after HTML-escaping it.appendHtmlConstant
(String html) Appends a compile-time-constant string, which will not be escaped.Returns the safe HTML accumulated in the builder as aSafeHtml
.
-
Constructor Details
-
SafeHtmlBuilder
public SafeHtmlBuilder()Constructs an empty SafeHtmlBuilder.
-
-
Method Details
-
append
Appends the string representation of a boolean.- Parameters:
b
- the boolean whose string representation to append- Returns:
- a reference to this object
-
append
Appends the string representation of a number.- Parameters:
num
- the number whose string representation to append- Returns:
- a reference to this object
-
append
Appends the string representation of a char.- Parameters:
c
- the character whose string representation to append- Returns:
- a reference to this object
- See Also:
-
append
Appends the string representation of a number.- Parameters:
num
- the number whose string representation to append- Returns:
- a reference to this object
-
append
Appends the string representation of a number.- Parameters:
num
- the number whose string representation to append- Returns:
- a reference to this object
-
append
Appends the string representation of a number.- Parameters:
num
- the number whose string representation to append- Returns:
- a reference to this object
-
append
Appends the string representation of a number.- Parameters:
num
- the number whose string representation to append- Returns:
- a reference to this object
-
appendEscaped
Appends a string after HTML-escaping it.- Parameters:
text
- the string to append- Returns:
- a reference to this object
- See Also:
-
appendEscapedLines
Appends a string consisting of several newline-separated lines after HTML-escaping it. Newlines in the original string are converted to<br>
tags.- Parameters:
text
- the string to append- Returns:
- a reference to this object
- See Also:
-
appendHtmlConstant
Appends a compile-time-constant string, which will not be escaped.Important: For this class to be able to honor its contract as required by
SafeHtml
, all uses of this method must satisfy the following constraints:- The argument expression must be fully determined at compile time.
- The value of the argument must end in "inner HTML" context and not
contain incomplete HTML tags. I.e., the following is not a correct use of
this method, because the
<a>
tag is incomplete:shb.appendHtmlConstant("<a href='").append(url)
The first constraint provides a sufficient condition that the appended string (and any HTML markup contained in it) originates from a trusted source. The second constraint ensures the composability of
SafeHtml
values.When executing client-side in Development Mode, or server-side with assertions enabled, the argument is HTML-parsed and validated to satisfy the second constraint (the server-side check can also be enabled programmatically, see
SafeHtmlHostedModeUtils.maybeCheckCompleteHtml(String)
for details). For performance reasons, this check is not performed in prod mode on the client, and with assertions disabled on the server.- Parameters:
html
- the HTML snippet to be appended- Returns:
- a reference to this object
- Throws:
IllegalArgumentException
- if not running in prod mode andhtml
violates the second constraint
-
toSafeHtml
Returns the safe HTML accumulated in the builder as aSafeHtml
.- Returns:
- a SafeHtml instance
-