HTML-Zeichenfolge kann nicht angezeigt werden


91

Ich habe Probleme mit der Anzeige von HTML-Zeichenfolgen in Android WebView.

Auf der Serverseite habe ich eine Webseite heruntergeladen und HTML-Zeichen und Anführungszeichen maskiert (ich habe Python verwendet):

my_string = html.escape(my_string, True)

Auf der Android-Client-Seite: Zeichenfolgen werden nicht entfernt von:

myString = StringEscapeUtils.unescapeHtml4(myString)
webview.loadData( myString, "text/html", "encoding");

In der Webansicht werden sie jedoch nur als Literalzeichenfolgen angezeigt. Hier ist das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Bearbeiten: Ich füge die ursprüngliche Zeichenfolge hinzu, die von der Serverseite zurückgegeben wurde:

link rel = "Apple-Touch-Symbol" Größen = "114 x 114" href = & quot; /static/favicon/apple-touch-icon-114x114.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "72 x 72" href = & quot; /static/favicon/apple-touch-icon-72x72.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "144 x 144" href = & quot; /static/favicon/apple-touch-icon-144x144.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "60 x 60" href = & quot; /static/favicon/apple-touch-icon-60x60.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "120 x 120" href = & quot; /static/favicon/apple-touch-icon-120x120.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "76 x 76" href = & quot; /static/favicon/apple-touch-icon-76x76.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "152 x 152" href = & quot; /static/favicon/apple-touch-icon-152x152.png" & gt; & lt; link rel = & quot; Apple-Touch-Symbol & quot; Größen = "180 x 180" href = & quot; /static/favicon/apple-touch-icon-180x180.png" & gt; & lt; link rel = & quot; icon & quot; Typ = "Bild / PNG" href = & quot; /static/favicon/favicon-192x192.png" Größen = "192 x 192" & gt; & lt; link rel = & quot; icon & quot; Typ = "Bild / PNG" href = & quot; /static/favicon/favicon-160x160.png" Größen = "160 x 160" & gt; & lt; link rel = & quot; Symbol & quot; Typ = "Bild / PNG" href = & quot; /static/favicon/favicon-96x96.png" Größen = "96 x 96" & gt; & lt; link rel = & quot; icon & quot; Typ = "Bild / PNG" href = & quot; /static/favicon/favicon-16x16.png" Größen = "16 x 16" & gt; & lt; link rel = & quot; icon & quot; Typ = "Bild / PNG" href = & quot; /static/favicon/favicon-32x32.png" Größen = "32 x 32" & gt; & lt; meta name = & quot; msapplication-TileColor & quot; content = & quot; # da532c & quot; & gt; & lt; meta name = & quot; msapplication-TileImage & quot; content = & quot; /static/favicon/mstile-144x144.png" & gt; & lt; meta name = & quot; msapplication-config & quot; content = & quot; /static/favicon/browserconfig.xml" & gt; & lt ;! - Externes CSS - & gt; & lt; link rel = & quot; Stylesheet & quot; href = & quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css& quot; & gt; & lt ;! - Externe Schriftarten - & gt; & lt; link href = & quot; // maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel = & quot; Stylesheet & quot; & gt; & lt; link href = & # x27; // fonts.googleapis.com/css?family=Open+Sans:300,600' rel = & # x27; Stylesheet & # x27; Typ = & # x27; Text / CSS & # x27; & gt; & lt; link href = & # x27; // fonts.googleapis.com/css?family=Lora:400,700' rel = & # x27; Stylesheet & # x27; Typ = & # x27; Text / CSS & # x27; & gt; & lt ;! - [wenn IE 9] & gt; & lt; script src = & quot; // cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script> & lt; script src = & quot; // cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script> & lt;! [endif] - & gt; & lt ;! - Site CSS - & gt; & lt; link rel = & quot; Stylesheet & quot; Typ = & quot; Text / CSS & quot; href = & quot; /static/css/style.css" & gt; & lt; link rel = & quot; Stylesheet & quot; Typ = & quot; Text / CSS & quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; Körper & gt; & lt; div class = & quot; Containerartikelseite & quot; & gt; & lt; div class = "row" & gt; & lt; div class = "col-md-8 col-md-offset-2" & gt; & lt; h2 & gt; & lt; a href = & quot; quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; Körper & gt; & lt; div class = & quot; Containerartikelseite & quot; & gt; & lt; div class = "row" & gt; & lt; div class = "col-md-8 col-md-offset-2" & gt; & lt; h2 & gt; & lt; a href = & quot; quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; Körper & gt; & lt; div class = & quot; Containerartikelseite & quot; & gt; & lt; div class = "row" & gt; & lt; div class = "col-md-8 col-md-offset-2" & gt; & lt; h2 & gt; & lt; a href = & quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html & quot; & gt; Gov. Jerry Brown sagt, Ted Cruz sei & # 39; absolut ungeeignet & # 39; Aus Gründen des Klimawandels für ein Amt kandidieren & lt; / a & gt; & lt; / h2 & gt; & lt; h4 & gt; Sam Levine & lt; / h4 & gt; & lt; div class = "Artikel" & gt; & lt; p & gt; Der kalifornische Gouverneur Jerry Brown (D) sagte am Sonntag, dass der texanische Senator Ted Cruz (R-Texas) "absolut ungeeignet ist, für ein Amt zu kandidieren". wegen seiner Position zum Klimawandel. & lt; / p & gt; & lt; p & gt; & quot; Ich bin gerade aus New Hampshire zurückgekommen, wo überall Schnee und Eis liegen. Mein Standpunkt dazu ist einfach: Debatten darüber sollten der Wissenschaft und den Daten folgen, und viele der Alarmisten zur globalen Erwärmung sollten Sie haben ein Problem, weil die Wissenschaft sie nicht sichert. Cruz & lt; a href = & quot;https://www.youtube.com/watch?v=m0UJ_Sc0Udk & quot; & gt; sagte & lt; / a & gt; am "Late Night with Seth Meyers" letzte Woche. & lt; / p & gt; & lt; p & gt; Um seine Behauptung zu untermauern, zitierte Cruz Satellitendaten, die in den letzten 17 Jahren einen Mangel an signifikanter Erwärmung gezeigt haben. Aber Cruz 'Argumentation & lt; a href = & quot; http://www.politifact.com/truth-o-meter/statements/2015/mar/20 / ted-cruz / ted-cruzs-Welten-Feuer-nicht-letzte-17-Jahre / & quot; & gt; war entlarvt von Politifact & lt; / a & gt;, was gezeigt hat, dass Wissenschaftler genügend Beweise haben, um zu glauben, dass sich das Klima weiter erwärmen wird. & lt; / p & gt; & lt; p & gt; "Was er gesagt hat, ist absolut falsch", sagte Brown auf & lt; a href = & quot; http: //www.nbcnews. untit-be-running-n328046 & quot; & gt; NBC & # x27; s & quot; Meet the Press. & quot; & lt; / a & gt; Er fügte hinzu, dass & lt; a href = & quot; http://climate.nasa.gov/scientific-consensus/ & quot; & gt; über 90 Prozent & lt; / a & gt; Wissenschaftler, die das Klima untersuchen, sind sich einig, dass der Klimawandel durch menschliche Aktivitäten verursacht wird. "Dieser Mann weist auf ein solches Maß an Unwissenheit und eine direkte Fälschung vorhandener wissenschaftlicher Daten hin." Es ist schockierend, und ich denke, der Mensch hat sich absolut unfähig gemacht, für ein Amt zu kandidieren. Brown sagte. & Lt; / p & gt; & lt; p & gt; Brown fügte hinzu, dass der Klimawandel & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/06/california-drought-february- record_n_6820704.html? utm_hp_ref = Dürre in Kalifornien & quot; & gt; verursachte Dürren in seinem Bundesstaat & lt; / a & gt; sowie schwere Erkältungen und Stürme an der Ostküste. & lt; / p & gt; & lt; p & gt; Während Cruz möglicherweise überall in New Hampshire Schnee und Eis gesehen hat, zeigen Daten, dass das Land tatsächlich eine & lt; a href = & quot; http://www.huffingtonpost.com/2015/02/19/cold-weather- winter_n_6713104.html & quot; & gt; wärmer als der Durchschnitt & lt; / a & gt; Winter. & lt; / p & gt; & lt; p & gt; Browns Kritik an Cruz kommt einen Tag, bevor der Senator von Texas einen & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html">presidential Kampagne & lt; / a & gt;. & lt; / p & gt; & lt; / div & gt; & lt; div class = "original" & gt; & lt; a href = & quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html& quot; & gt; ORIGINAL ANZEIGEN & lt; / a & gt; & lt; / div & gt; & lt; / div & gt; & lt; / div & gt; & lt; / div & gt; & lt; script src = & quot; // code.jquery.com/jquery-latest.js"></script> & lt; script src = & quot; /static/js/modal.js" & gt; & lt; / script & gt; & lt; script src = & quot; /static/js/bootbox.min.js" & gt; & lt; / script & gt; & lt; script src = & quot; /static/js/site.js" & gt; & lt; / script & gt; & lt; Skript & gt; (Funktion (i, s, o, g, r, a, m) {i [& # x27; GoogleAnalyticsObject & # x27;] = r; i [r] = i [r] || function () {(i [ r] .q = i [r] .q || []). push (Argumente)}, i [r] .l = 1 * neues Datum (); a = s.createElement (o), m = s. getElementsByTagName (o) [0]; a.async = 1; a.src = g; m.parentNode.insertBefore (a, m)}) (Fenster, Dokument, & # x27; Skript & # x27 ;, & # x27; // www. google-analytics.com/analytics.js' ,'ga'); ga (& # x27; create & # x27;, & # x27; UA-56257533-1 & # x27;, & # x27; auto & # x27;); ga (& # x27; send & # x27;, & # x27; Seitenaufruf & # x27;); & lt; / script & gt; & lt; / body & gt; & lt; / html & gt; "


Fragen, die Hilfe beim Debuggen suchen ("Warum funktioniert dieser Code nicht?"), Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen bestimmten Fehler und den kürzesten Code enthalten, der erforderlich ist, um ihn in der Frage selbst zu reproduzieren. Siehe: " So erstellen Sie ein minimales, reproduzierbares Beispiel ".
der Blechmann

Antworten:


50

Ich habe den Code hier geändert:

public class test extends Activity {
    private WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        wv = (WebView) findViewById(R.id.wv);
        String s = "&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt; &lt;meta name=&quot;description&quot; content=&quot;&quot;&gt; &lt;title&gt;Saulify&lt;/title&gt; &lt;!-- All the Favicons... --&gt; &lt;link rel=&quot;shortcut icon&quot; href=&quot;/static/favicon/favicon.ico&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;57x57&quot; href=&quot;/static/favicon/apple-touch-icon-57x57.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;114x114&quot; href=&quot;/static/favicon/apple-touch-icon-114x114.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;72x72&quot; href=&quot;/static/favicon/apple-touch-icon-72x72.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;144x144&quot; href=&quot;/static/favicon/apple-touch-icon-144x144.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;60x60&quot; href=&quot;/static/favicon/apple-touch-icon-60x60.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;120x120&quot; href=&quot;/static/favicon/apple-touch-icon-120x120.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;76x76&quot; href=&quot;/static/favicon/apple-touch-icon-76x76.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;152x152&quot; href=&quot;/static/favicon/apple-touch-icon-152x152.png&quot;&gt; &lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;180x180&quot; href=&quot;/static/favicon/apple-touch-icon-180x180.png&quot;&gt; &lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;/static/favicon/favicon-192x192.png&quot; sizes=&quot;192x192&quot;&gt; &lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;/static/favicon/favicon-160x160.png&quot; sizes=&quot;160x160&quot;&gt; &lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;/static/favicon/favicon-96x96.png&quot; sizes=&quot;96x96&quot;&gt; &lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;/static/favicon/favicon-16x16.png&quot; sizes=&quot;16x16&quot;&gt; &lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;/static/favicon/favicon-32x32.png&quot; sizes=&quot;32x32&quot;&gt; &lt;meta name=&quot;msapplication-TileColor&quot; content=&quot;#da532c&quot;&gt; &lt;meta name=&quot;msapplication-TileImage&quot; content=&quot;/static/favicon/mstile-144x144.png&quot;&gt; &lt;meta name=&quot;msapplication-config&quot; content=&quot;/static/favicon/browserconfig.xml&quot;&gt; &lt;!-- External CSS --&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&quot;&gt; &lt;!-- External Fonts --&gt; &lt;link href=&quot;//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css&quot; rel=&quot;stylesheet&quot;&gt; &lt;link href=&#x27;//fonts.googleapis.com/css?family=Open+Sans:300,600&#x27; rel=&#x27;stylesheet&#x27; type=&#x27;text/css&#x27;&gt; &lt;link href=&#x27;//fonts.googleapis.com/css?family=Lora:400,700&#x27; rel=&#x27;stylesheet&#x27; type=&#x27;text/css&#x27;&gt; &lt;!--[if lt IE 9]&gt; &lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js&quot;&gt;&lt;/script&gt; &lt;![endif]--&gt; &lt;!-- Site CSS --&gt; &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/static/css/style.css&quot;&gt; &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/static/css/glyphicon.css&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;div class=&quot;container article-page&quot;&gt; &lt;div class=&quot;row&quot;&gt; &lt;div class=&quot;col-md-8 col-md-offset-2&quot;&gt; &lt;h2&gt;&lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&quot;&gt;Gov. Jerry Brown Says Ted Cruz Is &amp;#39;Absolutely Unfit&amp;#39; To Run For Office Because Of Climate Change Views&lt;/a&gt;&lt;/h2&gt; &lt;h4&gt;Sam Levine&lt;/h4&gt; &lt;div class=&quot;article&quot;&gt; &lt;p&gt;California Gov. Jerry Brown (D) said on Sunday that Texas Sen. Ted Cruz (R-Texas) is &quot;absolutely unfit to be running for office&quot; because of his position on climate change.&lt;/p&gt; &lt;p&gt;&quot;I just came back from New Hampshire, where there&#x27;s snow and ice everywhere. My view on this is simple: Debates on this should follow science and should follow data, and many of the alarmists on global warming, they have a problem because the science doesn&#x27;t back them up,&quot; Cruz &lt;a href=&quot;https://www.youtube.com/watch?v=m0UJ_Sc0Udk&quot;&gt;said&lt;/a&gt; on &quot;Late Night with Seth Meyers&quot; last week.&lt;/p&gt; &lt;p&gt;To back up his claim, Cruz cited satellite data that has shown a lack of significant warming over the last 17 years. But Cruz&#x27;s reasoning &lt;a href=&quot;http://www.politifact.com/truth-o-meter/statements/2015/mar/20 /ted-cruz/ted-cruzs-worlds-fire-not-last-17-years/&quot;&gt;has been debunked by Politifact&lt;/a&gt;, which has shown that scientists have ample evidence to believe that the climate will continue to warm.&lt;/p&gt; &lt;p&gt;&quot;What he said is absolutely false,” Brown said on &lt;a href=&quot;http://www.nbcnews.com/meet-the-press/california-governor-ted-cruz- unfit-be-running-n328046&quot;&gt;NBC&#x27;s &quot;Meet the Press.&quot;&lt;/a&gt; He added that &lt;a href=&quot;http://climate.nasa.gov/scientific-consensus/&quot;&gt;over 90 percent&lt;/a&gt; of scientists who study the climate agree that climate change is caused by human activity. &quot;That man betokens such a level of ignorance and a direct falsification of existing scientific data. It&#x27;s shocking, and I think that man has rendered himself absolutely unfit to be running for office,&quot; Brown said.&lt;/p&gt; &lt;p&gt;Brown added that climate change has &lt;a href=&quot;http://www.huffingtonpost.com/2015/03/06/california-drought-february- record_n_6820704.html?utm_hp_ref=california-drought&quot;&gt;caused droughts in his state&lt;/a&gt;, as well as severe cold and storms on the east coast.&lt;/p&gt; &lt;p&gt;While Cruz may have seen snow and ice everywhere in New Hampshire, data shows that the country is actually experiencing a &lt;a href=&quot;http://www.huffingtonpost.com/2015/02/19/cold-weather- winter_n_6713104.html&quot;&gt;warmer than average&lt;/a&gt; winter.&lt;/p&gt; &lt;p&gt;Brown’s criticism of Cruz comes one day before the Texas senator is set to announce a &lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html&quot;&gt;presidential campaign&lt;/a&gt;. &lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;original&quot;&gt; &lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&quot;&gt;VIEW ORIGINAL&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;script src=&quot;//code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;/static/js/modal.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;/static/js/bootbox.min.js&quot;&gt;&lt;/script&gt; &lt;script src=&quot;/static/js/site.js&quot;&gt;&lt;/script&gt; &lt;script&gt; (function(i,s,o,g,r,a,m){i[&#x27;GoogleAnalyticsObject&#x27;]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,&#x27;script&#x27;,&#x27;//www.google-analytics.com/analytics.js&#x27;,&#x27;ga&#x27;); ga(&#x27;create&#x27;, &#x27;UA-56257533-1&#x27;, &#x27;auto&#x27;); ga(&#x27;send&#x27;, &#x27;pageview&#x27;); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;";


        wv.loadData(stripHtml(s), "text/html", "UTF-8");

    }

    public String stripHtml(String html) {
        return Html.fromHtml(html).toString();
    }

}

Geben Sie hier die Bildbeschreibung ein


9

Versuchen Sie diesen Code,

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N){
   yourtextview.setText(Html.fromHtml(yourstring,Html.FROM_HTML_MODE_LEGACY));
}
else {
   yourtextview.setText(Html.fromHtml(yourstring));
}

6

Versuche dies:

wv = (WebView) findViewById(R.id.wv);
String s = "You HTML string";
wv.loadData(stripHtml(s), "text/html", "UTF-8");

public String stripHtml(String html) {
    return Html.fromHtml(html).toString();
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.