Gestisco un forum progettato per supportare un gruppo internazionale di matematica. Di recente l'ho convertito in unicode per un migliore supporto di personaggi internazionali. Nel debug di questa conversione, ho scoperto che non tutti i caratteri Unicode sono considerati come XHTML validi (il sito Web pertinente sembra essere http://www.w3.org/TR/unicode-xml/). Uno dei passaggi che il software del forum attraversa prima di presentare i post al browser è un passaggio di validazione/sanificazione XHTML. Sembra un'idea ragionevole che a quel punto dovrebbe rimuovere tutti i caratteri Unicode che XHTML non gradisce.Come rimuovere i caratteri Unicode che XHTML considera non validi utilizzando php?
Quindi la mia domanda è:
Esiste uno standard (o migliore) modo di fare questo in PHP?
(Il forum è scritto in PHP, tra l'altro.)
immagino che il fail-safe sarebbe un semplice str_replace
(se questo è anche il migliore, ho bisogno di fare qualcosa in più per assicurarsi funziona correttamente con unicode?) ma ciò comporterebbe il dover esaminare attentamente la DTD XHTML (o la pagina W3 di riferimento) per capire quali caratteri elencare nella ricerca di str_replace
, quindi se questa è la il modo migliore, qualcuno lo ha già fatto in modo da poter rubare, errare, copiare, vero?
(Per inciso, il personaggio che ha causato il problema era U + 000C, il 'formfeed', che (secondo la pagina W3) è valido HTML ma XHTML valido!)
Direi che è più veloce del metodo preg_replace (soprattutto dato il commento sulla velocità su http://php.net/manual/en/regexp.reference.unicode.php), ma soffre dello stesso inconveniente che devo capire la mia whitelist! (Vedi il commento sopra sull'essere pigri!) –
Non è necessario calcolare la propria white-list. I caratteri sono consentiti in base al codice ASCII e vengono sostituiti con uno spazio quando non rientrano nell'intervallo specificato dalla funzione. Sono abbastanza sicuro che questo è tutto ciò di cui hai bisogno, la white-list è già nella funzione. – Bas
Certo, c'è una * lista bianca nella funzione, ma come faccio a sapere che è la whitelist corretta? Ad esempio, 0xC è consentito in HTML ma non in XHTML. Se sto lavorando da una whitelist, dovrebbe essere generato in qualche modo dalla DTD. –