Per prima cosa, devi capire che tipo di testo rappresenta il tuo input. Una possibilità è testo non elaborato : una lettera indica una lettera, una parentesi angolare indica una parentesi angolare, una barra rovesciata indica una barra rovesciata e così via. O forse è un testo con escape backslash : una lettera significa una lettera, una parentesi angolare indica una parentesi angolare, ma una barra rovesciata avvia una sequenza di escape. Un'altra possibilità è markup HTML : una parentesi angolare sinistra avvia un elemento HTML, una e commerciale inizia un'entità e così via. Esistono tutti i tipi di altri linguaggi di markup: XML, Markdown, bbcode, ecc.
Convalida: potresti ottenere un input che non si adatta alla tua interpretazione, come il markup HTML malformato. Dovresti rifiutarlo o correggerlo automaticamente. Forse vuoi solo consentire determinati tag nel tuo markup HTML. Dovresti fare qualcosa con gli altri tag: eliminarli, trattarli come testo letterale (cioè visualizzarli come una parentesi angolare sinistra, lettere, parentesi angolare destra), rifiutare l'input, o qualsiasi altra cosa. Probabilmente dovrai analizzare l'input in base alla tua interpretazione per convalidarlo; se provi a farlo con le espressioni regolari, probabilmente ti sbagli.
Ora che sai cosa hai (interpretazione) e sai di averlo (convalida e / o analisi), dovrebbe essere facile tradurlo in qualunque cosa tu voglia renderlo come. Quando si esegue il rendering di testo non elaborato su HTML, è necessario prestare attenzione ai caratteri che sono speciali per HTML. Se si esegue il rendering di alcuni markup wiki, è necessario mappare il markup wiki al markup HTML --- e ancora, se il markup wiki contiene caratteri speciali per HTML, è necessario eseguire il escape. Se stai rendendo un sottoinsieme di HTML e hai già convalidato l'input in modo che contenga solo il sottoinsieme che permetti, allora hai finito.
Questo è l'intero processo. Ora puoi consultare varie librerie e decidere se fanno la traduzione che ti serve. Ad esempio, IIUC, htmlentities()
esegue il rendering di una stringa che rappresenta il testo non elaborato in markup HTML. Può essere. A seconda di come si desidera rendere le nuove linee. Probabilmente l'output dovrebbe essere come HTML-dove-newlines-sono-ancora significativi.
È facile ingannare se stessi pensando che le scorciatoie siano corrette (ad esempio "rimuoverò i tag script con un'espressione regolare"). Attenzione.