Maybe you need to check if the string is well formed.
I would use a function like this
function check($string) {
  $start =strpos($string, '<');
  $end  =strrpos($string, '>',$start);
  $len=strlen($string);
  if ($end !== false) {
    $string = substr($string, $start);
  } else {
    $string = substr($string, $start, $len-$start);
  }
  libxml_use_internal_errors(true);
  libxml_clear_errors();
  $xml = simplexml_load_string($string);
  return count(libxml_get_errors())==0;
}
Just a warning: html permits unbalanced string like the following one. It is not an xml valid chunk but it is a legal html chunk
<ul><li>Hi<li> I'm another li</li></ul>
Disclaimer I've modified the code (without testing it). in order to detect well formed html inside the string.
A last though 
Maybe you should use strip_tags to control user input (As I've seen in your comments)