A simple PHP function to escape any HTML reserve characters submitted to a server-side script via an HTML <form>
.
//*******************************//
// ESCAPE HTML-SOURCE FORM DATA //
//*******************************//
function HTML_Escape($String) {
$String = str_replace('\'', ''', $String);
$String = str_replace('"', '"', $String);
$String = str_replace('<', '<', $String);
$String = str_replace('>', '>', $String);
$String = str_replace('{', '{', $String);
$String = str_replace('}', '}', $String);
$String = str_replace('[', '[', $String);
$String = str_replace(']', ']', $String);
$String = str_replace(['\%', '%'], '%', $String);
$String = str_replace('*', '*', $String);
$String = str_replace(["\r\n", "\r", "\n"], '', $String);
return $String;
}
$myData = HTML_Escape(htmlspecialchars($_POST['my-data'], ENT_NOQUOTES, 'UTF-8', FALSE));
If needed, the following reverseHTMLEscape($String)
PHP function will return the string to its original form (albeit with --
instead of newlines):
function reverseHTMLEscape($String) {
$Escaped_HTML_String = $String;
$Escaped_HTML_String = str_replace('<', '<', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('>', '>', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('{', '{', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('}', '}', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('[', '[', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace(']', ']', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace(''', '\\\'', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('"', '\"', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('&', '&', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('%', '%', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('*', '*', $Escaped_HTML_String);
$Escaped_HTML_String = str_replace('', ' -- ', $Escaped_HTML_String);
return $Escaped_HTML_String;
}
$Escaped_HTML_String = reverseHTMLEscape($String);
It may be necessary to reverse HTML Escape the HTML-escaped string, if the string ever needs to be displayed in:
<input type="text" />
<textarea></textarea>
on the client-side.
In this situation, the following reverseHTMLEscape()
javascript function will return the string to its original form:
const reverseHTMLEscape = (escapedHTMLString) => {
escapedHTMLString = escapedHTMLString.replace(/</g, '<');
escapedHTMLString = escapedHTMLString.replace(/>/g, '>');
escapedHTMLString = escapedHTMLString.replace(/{/g, '{');
escapedHTMLString = escapedHTMLString.replace(/}/g, '}');
escapedHTMLString = escapedHTMLString.replace(/[/g, '[');
escapedHTMLString = escapedHTMLString.replace(/]/g, ']');
escapedHTMLString = escapedHTMLString.replace(/'/g, '\'');
escapedHTMLString = escapedHTMLString.replace(/"/g, '"');
escapedHTMLString = escapedHTMLString.replace(/&/g, '&');
escapedHTMLString = escapedHTMLString.replace(/%/g, '%');
escapedHTMLString = escapedHTMLString.replace(/*/g, '*');
escapedHTMLString = escapedHTMLString.replace(//g, '\n');
return escapedHTMLString;
};