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}) >= 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 .= "&#".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 :-(