Ciao ragazzi,
ho scaricato questa classe PHP che mi codifica tutti i caratteri in modo perfetto. L'unico problema è che se inserisco una stringa che ha uno /n non mi funziona più.

Codice PHP:
class HtmlEnc{
  static function 
uniord($c) {
    
$ud 0;
    if (
ord($c{0}) >= && ord($c{0}) <= 127$ud ord($c{0});
    if (
ord($c{0}) >= 192 && ord($c{0}) <= 223$ud = (ord($c{0})-192)*64 + (ord($c{1})-128);
    if (
ord($c{0}) >= 224 && ord($c{0}) <= 239$ud = (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
    if (
ord($c{0}) >= 240 && ord($c{0}) <= 247$ud = (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
    if (
ord($c{0}) >= 248 && ord($c{0}) <= 251$ud = (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
    if (
ord($c{0}) >= 252 && ord($c{0}) <= 253$ud = (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
    if (
ord($c{0}) >= 254 && ord($c{0}) <= 255$ud false// error
    
return $ud;
  }
  
  static function 
toHtml($str){
      
$html_str "";
      while (
strlen($str) > 0) {
        
preg_match("/^(.)(.*)$/u"$str$match);
        
$test utf8_decode($match[1]);
        if (
$test != "?"
          
$html_str .= htmlentities(htmlentities($test));
        else if (
strlen($match[1]) > 1)
          
$html_str .= "&amp;#".self::uniord($match[1]).";";
        else 
          
$html_str .= htmlentities(htmlentities($match[1]));
        
$str $match[2];
      }
      return 
html_entity_decode($html_str);
  }

Esempio funzionante:

Codice PHP:
echo HtmlEnc::toHtml("ciao ’ pippo"); 
Esempio non funzionante:

Codice PHP:
echo HtmlEnc::toHtml("ciao ’ 
pippo"
); 
Come posso risolvere? Secondo me ci sarà qualcosa che non va nelle espressioni regolari, ma non sono molto bravo con i regex :-(