<?php
function FixUTF8($args) {
$output = $args['input'];
$output = convertNamedHTMLEntitiesToNumeric(['input'=>$output]);
preg_match_all('/(&#[0-9]+;)/', $output, $matches, PREG_OFFSET_CAPTURE
); $full_matches = $matches[0];
$found = [];
$search = [];
$replace = [];
for($i = 0; $i < count($full_matches); $i++) { $match = $full_matches[$i];
$word = $match[0];
if(!$found[$word]) {
$found[$word] = TRUE;
$search[] = $word;
$replacement = str_replace(['&#', ';'], ['HTML Entity #', ''], $word); $replace[] = $replacement;
}
}
return $new_output;
}
function convertNamedHTMLEntitiesToNumeric($args) {
$input = $args['input'];
# return htmlentities($c,ENT_XML1,"UTF-8"); -- see update below
$convmap = array(0x80, 0xffff, 0, 0xffff); }, $input);
}
print(FixUTF8(['input'=>"Oggi è un bel giorno"]));
PD9waHAKCgkJZnVuY3Rpb24gRml4VVRGOCgkYXJncykgewoJCQkkb3V0cHV0ID0gJGFyZ3NbJ2lucHV0J107CgkJCQoJCQkkb3V0cHV0ID0gY29udmVydE5hbWVkSFRNTEVudGl0aWVzVG9OdW1lcmljKFsnaW5wdXQnPT4kb3V0cHV0XSk7CgkJCQoJCQlwcmVnX21hdGNoX2FsbCgnLygmI1swLTldKzspLycsICRvdXRwdXQsICRtYXRjaGVzLCBQUkVHX09GRlNFVF9DQVBUVVJFKTsKCQkJJGZ1bGxfbWF0Y2hlcyA9ICRtYXRjaGVzWzBdOwoJCQkKCQkJJGZvdW5kID0gW107CgkJCSRzZWFyY2ggPSBbXTsKCQkJJHJlcGxhY2UgPSBbXTsKCQkJCgkJCWZvcigkaSA9IDA7ICRpIDwgY291bnQoJGZ1bGxfbWF0Y2hlcyk7ICRpKyspIHsKCQkJCSRtYXRjaCA9ICRmdWxsX21hdGNoZXNbJGldOwoJCQkJJHdvcmQgPSAkbWF0Y2hbMF07CgkJCQlpZighJGZvdW5kWyR3b3JkXSkgewoJCQkJCSRmb3VuZFskd29yZF0gPSBUUlVFOwoJCQkJCSRzZWFyY2hbXSA9ICR3b3JkOwoJCQkJCSRyZXBsYWNlbWVudCA9IHN0cl9yZXBsYWNlKFsnJiMnLCAnOyddLCBbJ0hUTUwgRW50aXR5ICMnLCAnJ10sICR3b3JkKTsKCQkJCQkkcmVwbGFjZVtdID0gJHJlcGxhY2VtZW50OwoJCQkJfQoJCQl9CgoJCQkkbmV3X291dHB1dCA9IHN0cl9yZXBsYWNlKCRzZWFyY2gsICRyZXBsYWNlLCAkb3V0cHV0KTsKCQkJCgkJCXJldHVybiAkbmV3X291dHB1dDsKCQl9CgkJCgkJZnVuY3Rpb24gY29udmVydE5hbWVkSFRNTEVudGl0aWVzVG9OdW1lcmljKCRhcmdzKSB7CgkJCSRpbnB1dCA9ICRhcmdzWydpbnB1dCddOwoJCQlyZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCIvKCZbYS16QS1aXVthLXpBLVowLTldKjspLyIsZnVuY3Rpb24oJG0pewoJCQkJJGMgPSBodG1sX2VudGl0eV9kZWNvZGUoJG1bMF0sRU5UX0hUTUw1LCJVVEYtOCIpOwoJCQkJIyByZXR1cm4gaHRtbGVudGl0aWVzKCRjLEVOVF9YTUwxLCJVVEYtOCIpOyAtLSBzZWUgdXBkYXRlIGJlbG93CgkJCQkKCQkJCSRjb252bWFwID0gYXJyYXkoMHg4MCwgMHhmZmZmLCAwLCAweGZmZmYpOwoJCQkJcmV0dXJuIG1iX2VuY29kZV9udW1lcmljZW50aXR5KCRjLCAkY29udm1hcCwgJ1VURi04Jyk7CgkJCX0sICRpbnB1dCk7CgkJfQoKcHJpbnQoRml4VVRGOChbJ2lucHV0Jz0+Ik9nZ2kgJmVncmF2ZTsgdW4gYmVsJm5ic3A7Z2lvcm5vIl0pKTs=