Tidak dapat menampilkan string HTML

Mar 23 2015

Saya berjuang dengan tampilan string HTML di Android WebView.

Di sisi server, saya mengunduh halaman web dan melarikan diri dari karakter HTML dan tanda kutip (saya menggunakan Python):

my_string = html.escape(my_string, True)

Di sisi klien Android: string tidak dipisahkan oleh:

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

Namun tampilan web hanya menampilkannya sebagai string literal. Inilah hasilnya:

Edit: Saya menambahkan string asli yang dikembalikan dari sisi server:

"& 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; Kompatibel dengan X-UA & quot; konten = & 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;! - Semua Favicon ... - & gt; & lt; link rel = & quot; ikon pintasan & quot; href = & quot; / static / favicon / favicon. ico & quot; & gt; & lt; link rel = & quot; apple-touch-icon & quot; size = & quot; 57x57 & quot; href = & quot; /static/favicon/apple-touch-icon-57x57.png" & gt; & lt; link rel = & quot ; apple-touch-icon & quot; size = & quot; 114x114 & quot; href = & quot; /static/favicon/apple-touch-icon-114x114.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; size = & quot ; 72x72 & quot; href = & quot; /static/favicon/apple-touch-icon-72x72.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; size = & quot; 144x144 & quot; href = & quot; / static / favicon / apel -touch-icon-144x144.png & quot; & gt; & lt; link rel = & quot; apple-touch-icon & quot; ukuran = & quot; 60x60 & quot; href = & quot; /static/favicon/apple-touch-icon-60x60.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; ukuran = & quot; 120x120 & quot; href = & quot; /static/favicon/apple-touch-icon-120x120.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; ukuran = & quot; 76x76 & quot; href = & quot; /static/favicon/apple-touch-icon-76x76.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; ukuran = & quot; 152x152 & quot; href = & quot; /static/favicon/apple-touch-icon-152x152.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; ukuran = & quot; 180x180 & quot; href = & quot; /static/favicon/apple-touch-icon-180x180.png" & gt; & lt; tautan rel = & quot; ikon & quot; ketik = & quot; gambar / png & quot; href = & quot; /static/favicon/favicon-192x192.png" ukuran = & quot; 192x192 & quot; & gt; & lt; tautan rel = & quot; ikon & quot; ketik = & quot; gambar / png & quot; href = & quot; /static/favicon/favicon-160x160.png" ukuran = & quot; 160x160 & quot; & gt; & lt; tautan rel = & quot; ikon & quot; ketik = & quot; gambar / png & quot; href = & quot; /static/favicon/favicon-96x96.png" ukuran = & quot; 96x96 & quot; & gt; & lt; tautan rel = & quot; ikon & quot; ketik = & quot; gambar / png & quot; href = & quot; /static/favicon/favicon-16x16.png" ukuran = & quot; 16x16 & quot; & gt; & lt; tautan rel = & quot; ikon & quot; ketik = & quot; gambar / png & quot; href = & quot; /static/favicon/favicon-32x32.png" ukuran = & quot; 32x32 & quot; & gt; & lt; meta name = & quot; msapplication-TileColor & quot; konten = & quot; # da532c & quot; & gt; & lt; meta name = & quot; msapplication-TileImage & quot; konten = & quot; /static/favicon/mstile-144x144.png" & gt; & lt; meta name = & quot; msapplication-config & quot; konten = & quot; /static/favicon/browserconfig.xml" & gt; & lt;! - CSS Eksternal - & gt; & lt; link rel = & quot; stylesheet & quot; href = & quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css & quot; & gt; & lt;! - Fon Eksternal - & 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; lembar gaya & # x27; ketik = & # x27; teks / css & # x27; & gt; & lt; link href = & # x27; // fonts.googleapis.com/css?family=Lora:400,700' rel = & # x27; lembar gaya & # x27; ketik = & # x27; teks / css & # x27; & gt; & lt;! - [jika lt 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;! - CSS Situs - & gt; & lt; link rel = & quot; stylesheet & quot; ketik = & quot; teks / css & quot; href = & quot; /static/css/style.css" & gt; & lt; link rel = & quot; stylesheet & quot; ketik = & quot; teks / css & quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; body & gt; & lt; div class = & quot; laman artikel kontainer & quot; & gt; & lt; div class = & quot; baris & 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; Pemerintah Jerry Brown Mengatakan Ted Cruz Adalah & amp; # 39; Benar-Benar Tidak & amp; # 39; Mencalonkan diri Untuk Kantor Karena Pandangan Perubahan Iklim & lt; / a & gt; & lt; / h2 & gt; & lt; h4 & gt; Sam Levine & lt; / h4 & gt; & lt; div class = & quot; artikel & quot; & gt; & lt; p & gt; Gubernur California Jerry Brown (D) mengatakan pada hari Minggu bahwa Senator Texas Ted Cruz (R-Texas) & quot; benar-benar tidak layak untuk mencalonkan diri & quot; karena posisinya terhadap perubahan iklim. & lt; / p & gt; & lt; p & gt; & quot; Saya baru saja kembali dari New Hampshire, di mana ada salju dan es di mana-mana. Pandangan saya tentang ini sederhana: Perdebatan tentang ini harus mengikuti sains dan harus mengikuti data, dan banyak dari para pemberi peringatan tentang pemanasan global, mereka memiliki masalah karena sains tidak mendukungnya, & quot; Cruz & lt; a href = & quot; https://www.youtube.com/watch?v=m0UJ_Sc0Udk & quot; & gt; mengatakan & lt; / a & gt; tentang & quot; Late Night with Seth Meyers & quot; minggu lalu. & lt; / p & gt; & lt; p & gt; Untuk mendukung klaimnya, Cruz mengutip data satelit yang menunjukkan kurangnya pemanasan yang signifikan selama 17 tahun terakhir. Tapi alasan Cruz & 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; telah dibantah oleh Politifact & lt; / a & gt ;, yang telah menunjukkan bahwa para ilmuwan memiliki banyak bukti untuk percaya bahwa iklim akan terus menghangat. & lt; / p & gt; & lt; p & gt; & quot; Apa yang dia katakan benar-benar salah, ”kata Brown di & 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; Perkenalkan Pers. & quot; & lt; / a & gt; Dia menambahkan bahwa & lt; a href = & quot; http://climate.nasa.gov/scientific-consensus/ & quot; & gt; lebih dari 90 persen & lt; / a & gt; ilmuwan yang mempelajari iklim setuju bahwa perubahan iklim disebabkan oleh aktivitas manusia. `` Orang itu menunjukkan tingkat ketidaktahuan dan pemalsuan langsung data ilmiah yang ada. Mengejutkan, dan menurut saya pria itu telah menjadikan dirinya benar-benar tidak layak untuk mencalonkan diri, & quot; Kata Brown. & Lt; / p & gt; & lt; p & gt; Brown menambahkan bahwa perubahan iklim memiliki & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/06/california-drought-february- record_n_6820704.html? utm_hp_ref = california-kekeringan & quot; & gt; menyebabkan kekeringan di negara bagiannya & lt; / a & gt ;, serta dingin yang parah dan badai di pantai timur. & lt; / p & gt; & lt; p & gt; Meskipun Cruz mungkin telah melihat salju dan es di mana-mana di New Hampshire, data menunjukkan bahwa negara tersebut sebenarnya mengalami & lt; a href = & quot; http://www.huffingtonpost.com/2015/02/19/cold-weather- winter_n_6713104.html & quot; & gt; lebih hangat dari rata-rata & lt; / a & gt; musim dingin. & lt; / p & gt; & lt; p & gt; Kritik Brown terhadap Cruz datang satu hari sebelum senator Texas itu mengumumkan & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html">kampanye presiden & lt; / a & gt ;. & lt; / p & gt; & lt; / div & gt; & lt; div class = & quot; asli & quot; & gt; & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html& quot; & gt; LIHAT YANG ASLI & 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; skrip & gt; (fungsi (i, s, o, g, r, a, m) {i [& # x27; GoogleAnalyticsObject & # x27;] = r; i [r] = i [r] || function () {(i [ r] .q = i [r] .q || []). dorong (argumen)}, i [r]. l = 1 * Tanggal baru (); a = s.createElement (o), m = s. getElementsByTagName (o) [0]; a.async = 1; a.src = g; m.parentNode.insertBefore (a, m)}) (jendela, dokumen, & # x27; skrip & # x27;, & # x27; //www.google-analytics.com/analytics.js','ga'); ga (& # x27; buat & # x27 ;, & # x27; UA-56257533-1 & # x27 ;, & # x27; auto & # x27;); ga (& # x27; kirim & # x27 ;, & # x27; tampilan halaman & # x27;); & lt; / script & gt; & lt; / body & gt; & lt; / html & gt; "

Jawaban

57 MrDumb Mar 23 2015 at 18:24

Saya telah mengubah kode di sini:

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();
    }

}

11 FeriAgusetiawan Mar 25 2018 at 16:06

Coba kode ini,

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));
}
8 Noname Mar 31 2016 at 19:21

Coba ini:

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();
}