Come posso evitare le e commerciali in XML per renderle come entità in HTML?


524

Ho del testo XML che desidero visualizzare in una pagina HTML. Questo testo contiene una e commerciale, che voglio rendere nella sua rappresentazione di entità: &.

Come posso evitare questa e commerciale nell'XML di origine? Ho provato &, ma questo è decodificato come il carattere e commerciale ( &), che non è valido in HTML .

Quindi voglio evitarlo in modo tale da renderlo come &nella pagina Web che utilizza l'output XML.


1
L'affermazione nell'ultima revisione di questa domanda che "il carattere commerciale effettivo (&) ... non è valido in HTML." è falso. Infatti, anche la risposta accettata alla domanda collegata fornita come giustificazione afferma "HTML5 ti consente di lasciarlo senza caratteri di escape, ma solo quando i dati che seguono non sembrano un riferimento di carattere valido" .
Mark Amery,

Risposte:


422

Quando il tuo XML contiene &, questo comporterà il testo &.

Quando lo usi in HTML, verrà visualizzato come &.


195

Come da §2.4 delle specifiche XML 1.0 , dovresti essere in grado di utilizzare &.

Ho provato & amp; ma questo non è permesso.

Sei sicuro che non sia un problema diverso? XML definisce esplicitamente questo come il modo per sfuggire alle e commerciali.


3
Questo era perfettamente ragionevole quando pubblicato, ma i cambiamenti (o forse i chiarimenti) alla domanda da quando l'hanno resa assurda come risposta. Per prima cosa, il passaggio citato non è più presente nella domanda.
Mark Amery,

133

Il &carattere è esso stesso un carattere di escape in XML, quindi la soluzione è concatenarlo e un equivalente decimale Unicode per &garantire così che non vi siano errori di analisi XML. Cioè, sostituisci il personaggio &con &.


5
Preferisco davvero questa soluzione! Dovrebbe anche essere possibile usare la notazione esadecimale:&
CodeManX

2
Logicamente, perché dovrebbe funzionare? Entrambe le stringhe hanno una e commerciale, inclusa quella con il codice carattere alla fine ...
sijpkes,

4
@sijpkes Perché la e commerciale qui dice al parser che i seguenti caratteri sono usati per rappresentare un altro carattere, che in questo caso sarebbe una e commerciale. Una e commerciale non è "illegale" in XML, ha solo un significato speciale. Significa "tutti i personaggi dopo questo fino a quando non si preme un punto e virgola dovrebbero essere tradotti in qualcos'altro". Quando hai una e commerciale normalmente, senza i caratteri descrittivi e il punto e virgola finale, il parser viene confuso.
Riley Major,

1
Questa è la risposta per me Aggiunta di & # 038; nella posizione della mia risposta Header risolto e non mostra la e commerciale sulla risposta Header. : D
iamjoshua,

Stack Overflow è fantastico. Ecco un post di quasi 11 anni che risolve il mio problema. Ed è stato visto oltre 690.000 volte.
Bill

69

Usa CDATAtag:

 <![CDATA[
   This is some text with ampersands & other funny characters. >>
 ]]>

4
Questa è un'ipotesi piuttosto che una risposta.
Bryan Oakley,

10
Potrebbe essere un'ipotesi; è corretto però. I marcatori CDATA consentono di utilizzare e commerciali non elaborate.
Quentin,

19
Il post originale non ha mai chiarito dove dovevano essere utilizzati i tag &, i tag CDATA non possono essere utilizzati per i valori degli attributi, solo per il contenuto effettivo dei tag, quindi il motivo per cui ho incluso "?".
scragar

1
Questo è ottimo anche per la caratterizzazione dei dati XML e questa risposta è utile in molti altri scenari relativi al rendering XML. Per me, mi è stato di grande aiuto in Camel XML DSL, quando avevo bisogno di impostare il corpo o qualche intestazione con alcuni dati XML, il parser Camel XML ignorava i contenuti CDATA, leggendoli come un flusso di caratteri. Senza questo il motore a cammello genera eccezioni di struttura XML non valide
Kimutai,

1
Questa è esattamente la risposta di cui avevo bisogno, perché nel mio caso non sono sicuro di quali caratteri potrebbero arrivare nell'XML, quindi devo sfuggire a tutto in quella sezione.
Matt,


11

Nel mio caso ho dovuto cambiarlo in %26.

Dovevo scappare &in un URL. Quindi &amp;non ha funzionato per me. La funzione urlencode cambia &in %26. In questo modo né XML né il meccanismo dell'URL del browser si sono lamentati dell'URL.


8
Sì. Si noti tuttavia che il PO riguardava la fuga in XML. L'escaping in un URL è un problema diverso. Il vero divertimento inizia quando hai URL in XML o frammenti XML in URL ...
Oskar Berggren

6

Ho provato & amp, ma non ha funzionato. Sulla base della risposta di Wim ten Brink ho provato & amp; amp e ha funzionato.

Uno dei miei colleghi sviluppatori mi ha suggerito di usare & # x26; e ha funzionato indipendentemente da quante volte può essere riprodotto.


5

&amp; è il modo di rappresentare una e commerciale nella maggior parte delle sezioni di un documento XML.

Se si desidera visualizzare XML all'interno di HTML, è necessario prima creare un codice XML con codifica corretta (che implica la modifica &in &amp;) e quindi utilizzarlo per creare codice HTML con codifica corretta (che implica la modifica &in &amp;). Ciò si traduce in:

&amp;amp;

Per una spiegazione più approfondita della codifica XML, vedere:

Di quali caratteri ho bisogno per fuggire nei documenti XML?


4

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> farà il trucco.


3

Che ne dici di usare l'unicode \u0026? Funziona per me nei miei file XML Android. Se sorgono problemi, qualcuno mi faccia sapere.


1
\ugli escape non hanno alcun significato speciale in XML in generale. -1.
Mark Amery,

@MarkAmery Sì, non hanno significati speciali, ed è proprio per questo che funzionano così bene - non c'è niente da interpretare, quindi non c'è niente da sbagliare. Il java interpreta l'unicode e visualizza una e commerciale proprio come l'OP vuole.
Scott Biggs,

1
@ScottBiggs Cosa c'entra Java con la domanda dell'OP?
Philippe-André Lorin,

1
@ScottBiggs Quindi è fuori tema. - 1.
Philippe-André Lorin,

1
@ScottBiggs Il fatto che funzioni per te e che alcuni altri possano trarne beneficio è irrilevante; la tua risposta è rumore per tutti gli altri lettori. Perché non si occupa del caso più generale di cui l'OP ha chiesto. Non si tratta di non condividere il tuo successo. Si tratta di tenerlo dove appartiene. Il tuo contributo potrebbe essere utile, ma non presentato come una risposta qui. Forse come commento, forse come risposta a un'altra domanda (che sei libero di creare e rispondere a te stesso).
Philippe-André Lorin,

0

Valuta se il tuo XML appare come di seguito.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

Non è possibile utilizzare <>direttamente come genera un errore. In tal caso, è possibile utilizzare &#60;&#62;in sostituzione di quello.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

Clicca qui per vedere tutti i codici.


2
Penso che questo terreno sia stato ben coperto nei 7 anni precedenti alla pubblicazione di questa risposta.
miken32,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.