Ho un mucchio di documenti text/html che sto elaborandoCome rilevare entità html non valide in PHP?
Alcuni di essi contengono entità html codificate che sto cercando di convertire nei loro caratteri utf decodificati grezzi.
Questo è facile utilizzando html_entity_decode
, tuttavia, alcuni dei soggetti non sono validi come
򙦙
Per questo motivo sto usando un regexp per tirare fuori ogni singola entità, e poi cercando di convalidare le loro in qualche modo .
Se un'entità non è valido, voglio lasciarlo come 򙦙
nel documento, ma le cose come un codificato &
sarebbe ancora diventare &
.
Solo qualche codice di prova di esempio ho bussato fino ..
<?php
function dump_chars($s)
{
if (preg_match_all('/&[#A-Za-z0-9]+;/', $s, $matches))
{
foreach ($matches[0] as $m)
{
$decoded = html_entity_decode($m, ENT_QUOTES, "UTF-8");
echo "[" . htmlentities($m, ENT_QUOTES, "UTF-8") . "] ";
echo "Decoded: [" . $decoded . "] ";
echo "Hex: [" . bin2hex($decoded) . "] ";
echo "detect: [" . mb_detect_encoding($decoded) . "]";
echo "<br>";
}
}
}
$payload = "" & ͉ ’ 򙦙";
echo "<html><head><meta charset='UTF-8'></head><body>";
dump_chars($payload);
sto disegnando un po 'di vuoto il modo migliore per convalidare l'entità, piacerebbe qualche aiuto per favore.