Không thể hiển thị chuỗi HTML


99

Tôi đang gặp khó khăn với HTML chuỗi hiển thị trong Android WebView.

Ở phía máy chủ, tôi đã tải xuống một trang web và thoát các ký tự và dấu ngoặc kép HTML (tôi đã sử dụng Python):

my_string = html.escape(my_string, True)

Về phía máy khách Android: các chuỗi không bị thoát bởi:

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

Tuy nhiên, chế độ xem web chỉ hiển thị chúng dưới dạng chuỗi ký tự. Đây là kết quả:

nhập mô tả hình ảnh ở đây

Chỉnh sửa: Tôi thêm chuỗi gốc được trả về từ phía máy chủ:

liên kết rel = & quot; apple-touch-icon & quot; kích thước = & quot; 114x114 & quot; href = & quot; /static/favicon/apple-touch-icon-114x114.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 72x72 & quot; href = & quot; /static/favicon/apple-touch-icon-72x72.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 144x144 & quot; href = & quot; /static/favicon/apple-touch-icon-144x144.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 60x60 & quot; href = & quot; /static/favicon/apple-touch-icon-60x60.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 120x120 & quot; href = & quot; /static/favicon/apple-touch-icon-120x120.png" & gt; & lt; liên kết rel = & quot; biểu tượng quả táo & quot; kích thước = & quot; 76x76 & quot; href = & quot; /static/favicon/apple-touch-icon-76x76.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 152x152 & quot; href = & quot; /static/favicon/apple-touch-icon-152x152.png" & gt; & lt; link rel = & quot; apple-touch-icon & quot; kích thước = & quot; 180x180 & quot; href = & quot; /static/favicon/apple-touch-icon-180x180.png" & gt; & lt; link rel = & quot; biểu tượng & quot; gõ = & quot; image / png & quot; href = & quot; /static/favicon/favicon-192x192.png" kích thước = & quot; 192x192 & quot; & gt; & lt; link rel = & quot; biểu tượng & quot; gõ = & quot; image / png & quot; href = & quot; /static/favicon/favicon-160x160.png" kích thước = & quot; 160x160 & quot; & gt; & lt; liên kết rel = & quot; biểu tượng & quot; gõ = & quot; image / png & quot; href = & quot; /static/favicon/favicon-96x96.png" kích thước = & quot; 96x96 & quot; & gt; & lt; link rel = & quot; biểu tượng & quot; gõ = & quot; image / png & quot; href = & quot; /static/favicon/favicon-16x16.png" kích thước = & quot; 16x16 & quot; & gt; & lt; link rel = & quot; biểu tượng & quot; gõ = & quot; image / png & quot; href = & quot; /static/favicon/favicon-32x32.png" kích thước = & quot; 32x32 & quot; & gt; & lt; meta name = & quot; msapplication-TileColor & quot; nội dung = & quot; # da532c & quot; & gt; & lt; meta name = & quot; msapplication-TileImage & quot; nội dung = & quot; /static/favicon/mstile-144x144.png" & gt; & lt; meta name = & quot; msapplication-config & quot; content = & quot; /static/favicon/browserconfig.xml" & gt; & lt;! - CSS bên ngoài - & gt; & lt; liên kết rel = & quot; biểu định kiểu & quot; href = & quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css& quot; & gt; & lt;! - Phông chữ Bên ngoài - & gt; & lt; link href = & quot; // maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel = & quot; biểu định kiểu & quot; & gt; & lt; link href = & # x27; // fonts.googleapis.com/css?family=Open+Sans:300,600' rel = & # x27; biểu định kiểu & # x27; gõ = & # x27; text / css & # x27; & gt; & lt; link href = & # x27; // fonts.googleapis.com/css?family=Lora:400,700' rel = & # x27; biểu định kiểu & # x27; gõ = & # x27; text / css & # x27; & gt; & lt;! - [nếu là 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 của trang web - & gt; & lt; liên kết rel = & quot; biểu định kiểu & quot; gõ = & quot; text / css & quot; href = & quot; /static/css/style.css" & gt; & lt; liên kết rel = & quot; biểu định kiểu & quot; gõ = & quot; text / css & quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; body & gt; & lt; div class = & quot; container article-page & quot; & gt; & lt; div class = & quot; hàng & quot; & gt; & lt; div class = & quot; col-md-8 col-md-offset-2 & quot; & gt; & lt; h2 & gt; & lt; a href = & quot; quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; body & gt; & lt; div class = & quot; container article-page & quot; & gt; & lt; div class = & quot; hàng & quot; & gt; & lt; div class = & quot; col-md-8 col-md-offset-2 & quot; & gt; & lt; h2 & gt; & lt; a href = & quot; quot; href = & quot; /static/css/glyphicon.css" & gt; & lt; / head & gt; & lt; body & gt; & lt; div class = & quot; container article-page & quot; & gt; & lt; div class = & quot; hàng & 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; Chính phủ. Jerry Brown nói Ted Cruz là & amp; # 39; Hoàn toàn không thích hợp & amp; # 39; Để chạy cho Văn phòng Vì Chế độ xem Biến đổi Khí hậu & lt; / a & gt; & lt; / h2 & gt; & lt; h4 & gt; Sam Levine & lt; / h4 & gt; & lt; div class = & quot; bài viết & quot; & gt; & lt; p & gt; Thống đốc California Jerry Brown (D) cho biết hôm Chủ nhật rằng Thượng nghị sĩ Texas Ted Cruz (R-Texas) & quot; hoàn toàn không thích hợp để tranh cử & quot; vì quan điểm của ông ấy đối với biến đổi khí hậu. & lt; / p & gt; & lt; p & gt; & quot; Tôi vừa trở về từ New Hampshire, nơi có băng tuyết ở khắp mọi nơi. Quan điểm của tôi về vấn đề này rất đơn giản: Các cuộc tranh luận về vấn đề này nên theo khoa học và nên theo dữ liệu, và nhiều người báo động về sự nóng lên toàn cầu, chúng có vấn đề vì khoa học không sao lưu chúng & quot; Cruz & lt; a href = & quot;https://www.youtube.com/watch?v=m0UJ_Sc0Udk & quot; & gt; said & lt; / a & gt; vào & quot; Đêm khuya với Seth Meyers & quot; tuần trước. & lt; / p & gt; & lt; p & gt; Để chứng minh cho tuyên bố của mình, Cruz đã trích dẫn dữ liệu vệ tinh cho thấy sự thiếu nóng lên đáng kể trong 17 năm qua. Nhưng Cruz & # x27; s lý luận & lt; a href = & quot; http://www.politifact.com/truth-o-meter/statements/2015/mar/20/ted-cruz / ted-cruzs-world-fire-not-last-17-years / & quot; & gt; đã do Politifact đưa ra & lt; / a & gt ;, đã chỉ ra rằng các nhà khoa học có nhiều bằng chứng để tin rằng khí hậu sẽ tiếp tục ấm lên. & lt; / p & gt; & lt; p & gt; & quot; Những gì anh ấy nói là hoàn toàn sai sự thật, ”Brown nói trên & lt; a href = & quot; http: //www.nbcnews. unfit-be-running-n328046 & quot; & gt; NBC & # x27; s & quot; Gặp gỡ Báo chí. & quot; & lt; / a & gt; Anh ấy đã thêm rằng & lt; a href = & quot; http://climate.nasa.gov/scientific-consensus/ & quot; & gt; hơn 90 phần trăm & lt; / a & gt; Các nhà khoa học nghiên cứu về khí hậu đều đồng ý rằng biến đổi khí hậu là do hoạt động của con người gây ra. & quot; Người đàn ông đó đã đánh cược mức độ thiếu hiểu biết như vậy và sự làm sai lệch trực tiếp dữ liệu khoa học hiện có. Thật là sốc và tôi nghĩ rằng người đàn ông đó hoàn toàn không thích hợp để tranh cử chức vụ, & quot; Brown cho biết. & Lt; / p & gt; & lt; p & gt; Brown nói thêm rằng biến đổi khí hậu đã & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/06/california-drought-feb 2- record_n_6820704.html? utm_hp_ref = california-dry & quot; & gt; gây ra hạn hán ở bang của anh ấy & lt; / a & gt ;, cũng như rét đậm và bão ở bờ biển phía đông. & lt; / p & gt; & lt; p & gt; Mặc dù Cruz có thể đã nhìn thấy băng tuyết ở khắp mọi nơi ở New Hampshire, nhưng dữ liệu cho thấy quốc gia này thực sự đang trải qua & lt; a href = & quot; http://www.huffingtonpost.com/2015/02/19/cold-weather- Winter_n_6713104.html & quot; & gt; ấm hơn mức trung bình & lt; / a & gt; mùa đông. & lt; / p & gt; & lt; p & gt; Brown chỉ trích Cruz xuất hiện một ngày trước khi thượng nghị sĩ Texas chuẩn bị công bố & lt; a href = & quot; http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html">presidential campaign & lt; / a & gt ;. & lt; / p & gt; & lt; / div & gt; & lt; div class = & quot; gốc & quot; & gt; & lt; a href = & quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html& quot; & gt; XEM NGUỒN GỐC & 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; 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 (đối số)}, 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','ga'); ga (& # x27; tạo & # x27 ;, & # x27; UA-56257533-1 & # x27 ;, & # x27; auto & # x27;); ga (& # x27; gửi & # x27 ;, & # x27; lần xem trang & # x27;); & lt; / script & gt; & lt; / body & gt; & lt; / html & gt; "


Các câu hỏi tìm kiếm trợ giúp gỡ lỗi ("tại sao mã này không hoạt động?") Phải bao gồm hành vi mong muốn, một vấn đề hoặc lỗi cụ thể và mã ngắn nhất cần thiết để tái tạo nó trong chính câu hỏi. Xem: " Cách tạo Ví dụ tối thiểu, có thể lặp lại ".
the Tin Man

Câu trả lời:


55

Tôi đã sửa đổi mã ở đây:

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

}

nhập mô tả hình ảnh ở đây


10

Hãy thử mã này,

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

7

Thử đi:

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();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.