2012-11-26 23 views
11

Fino ad ora pensavo che lo HttpUtility.HtmlDecode(" ") fosse uno spazio. Ma il codice sottostante restituisce sempre false.HtmlDecode dello spazio codificato in html non è lo spazio

string text = " "; 

text = HttpUtility.HtmlDecode(text); 

string space = " "; 

if (String.Compare(space, text) == 0) 
    return true; 
else 
    return false; 

Stesso quando provo con Server.HtmlDecode()

Perché è così?

Qualsiasi aiuto sarebbe molto apprezzato

Grazie, N

+1

A parte lo spazio unificatore, 'Si consiglia di non utilizzare il Confronta metodo per verificare l'uguaglianza (cioè, di guardare in modo esplicito per un valore di ritorno di 0 senza riguardo per se una stringa è minore o maggiore dell'altra). Invece, per determinare se due stringhe sono uguali, utilizzare il metodo StringEquals (String, String, StringComparison). - http://msdn.microsoft.com/en-us/library/fbh501kz.aspx – Habib

+2

@Habib o più semplicemente, nella maggior parte dei casi, solo '=='. –

risposta

13

L'entità HTML   non rappresenta uno spazio, rappresenta uno spazio non-breaking.

Lo spazio unificatore ha codice di carattere 160:

string nbspace = "\u00A0"; 

Inoltre, come ha notato Marc Gravell, avete doppio codificato il codice, quindi si avrebbe bisogno di decodificare due volte per ottenere il carattere :

string text = " "; 
text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(text)); 
+0

Controlla http://en.wikipedia.org/wiki/Non-breaking_space per ulteriori informazioni relative a questo. – Lloyd

+0

"& nbsp;" Ho aggiunto così che supponendo che questa pagina lo consideri come spazio quando invio la domanda. Non importa . Proverò a modificare – user1481853

+0

Grazie per le risposte. Ok ora quello che voglio è restituire il codice Html di ' ' come spazio normale. Come dovrei farlo? Qualsiasi altro modo diverso da String.Replace? – user1481853

2

Il codice HTML del   non significa alcun tipo di spazio. Significa, letteralmente, il testo   - ad esempio, se scrivessi HTML che parlava di HTML, potresti dover includere il testo  , che dovresti scrivere scrivendo l'HTML  .

Se trovassi:

string text = " "; 

poi che sarebbe decodificare a uno spazio non rompere.

2

sto pulendo il codice HTML in questo modo:

var text = WebUtility.HtmlDecode(html) 
     .Replace("\u00A0", " ") // Replace non breaking space with space. 
     .Replace(" ", " ") // Shrink multiple spaces into one space. 
     .Trim(); 
Problemi correlati