5

Android hat zwei verschiedene Arten zu entkommen/kodieren HTML-Zeichen/Entitäten in Strings:Was ist der Unterschied zwischen Android Html.escapeHtml und TextUtils.htmlEncode? Wann sollte ich das eine oder andere benutzen?

Lesen Sie die Dokumentation, sie beide so ziemlich die gleiche Sache zu tun scheinen, aber, wenn sie zu testen, habe ich ein paar ziemlich mysteriös erhalten (für mich) ausgegeben.

Eg. Mit der Eingabe: <p>This is a quote ". This is a euro symbol: €. <b>This is some bold text</b></p>

  • Html.escapeHtml gibt:

    &lt;p&gt;This is a quote ". This is a euro symbol: &#8364;. &lt;b&gt;This is some bold text&lt;/b&gt;&lt;/p&gt; 
    
  • Während TextUtils.htmlEncode gibt:

    &lt;p&gt;This is a quote &quot;. This is a euro symbol: €. &lt;b&gt;This is some bold text&lt;/b&gt;&lt;/p&gt; 
    

So scheint es, dass die zweite entkommt/codiert das Zitat ("), aber die erstens nicht, obwohl das erste das Euro-Symbol codiert, das zweite nicht. Ich bin verwirrt.


Was ist der Unterschied zwischen diesen beiden Methoden? Welche Charaktere entkommen/kodieren? Was ist der Unterschied zwischen Codierung und Flucht hier? Wann sollte ich das eine oder das andere benutzen (oder sollte ich, keuchen, beide zusammen benutzen?)?

Antwort

8

können Sie ihre Quellen vergleichen:

Dies ist, was Html.escapeHtml unter verwendet:

https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/core/java/android/text/Html.java#L387

Dies ist TextUtils.htmlEncode:

https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/core/java/android/text/TextUtils.java#L1361

Wie Sie sehen können, letztere gibt nur bestimmte Zeichen an, die für Markup reserviert sind in HTML, während Erstere auch Nicht-ASCII-Zeichen codiert, so dass sie in ASCII dargestellt werden können.

Also, wenn Ihre Eingabe nur lateinische Zeichen enthält (was heutzutage normalerweise unwahrscheinlich ist), oder Sie haben Unicode in Ihrer HTML-Seite richtig eingerichtet und können mit TextUtils.htmlEncode gehen.Wenn Sie jedoch sicherstellen müssen, dass Ihr Text auch bei Übertragung über 7-Bit-Kanäle funktioniert, verwenden Sie Html.escapeHtml.

Wie für die verschiedenen Behandlung der Anführungszeichen (") - es muss nur innerhalb Attributwerte Escape (siehe the spec), so wenn Sie nicht Ihren Text dort, sollten Sie in Ordnung sein.

Also meine persönliche Wahl wäre Html.escapeHtml, wie es vielseitiger scheint.

+0

Dank, vor allem für die Erklärung von Dingen, wann zu verwenden, was und warum, das, was über war ich unsicher. +1. – JonasCz

+0

Danke für die Referenzen und die Erklärung –