HTML文字列を表示できません


99

AndroidWebViewで文字列HTMLを表示するのに苦労しています。

サーバー側では、Webページをダウンロードし、HTML文字と引用符をエスケープしました(Pythonを使用しました)。

my_string = html.escape(my_string, True)

Androidクライアント側:文字列は次の方法でエスケープされません。

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

ただし、webviewはそれらをリテラル文字列として表示するだけです。結果は次のとおりです。

ここに画像の説明を入力してください

編集:サーバー側から返された元の文字列を追加します:

リンクrel =&quot; apple-touch-icon&quot; size =&quot; 114x114&quot; href =&quot; /static/favicon/apple-touch-icon-114x114.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 72x72&quot; href =&quot; /static/favicon/apple-touch-icon-72x72.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 144x144&quot; href =&quot; /static/favicon/apple-touch-icon-144x144.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 60x60&quot; href =&quot; /static/favicon/apple-touch-icon-60x60.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 120x120&quot; href =&quot; /static/favicon/apple-touch-icon-120x120.png"> &lt; link rel =&quot; アップルタッチアイコン&quot; size =&quot; 76x76&quot; href =&quot; /static/favicon/apple-touch-icon-76x76.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 152x152&quot; href =&quot; /static/favicon/apple-touch-icon-152x152.png"> &lt; link rel =&quot; apple-touch-icon&quot; size =&quot; 180x180&quot; href =&quot; /static/favicon/apple-touch-icon-180x180.png"> &lt; link rel =&quot; icon&quot; type =&quot; image / png&quot; href =&quot; /static/favicon/favicon-192x192.png" size =&quot; 192x192&quot;&gt; &lt; link rel =&quot; icon&quot; type =&quot; image / png&quot; href =&quot; /static/favicon/favicon-160x160.png" size =&quot; 160x160&quot;&gt; &lt; link rel =&quot; アイコン&quot; type =&quot; image / png&quot; href =&quot; /static/favicon/favicon-96x96.png" size =&quot; 96x96&quot;&gt; &lt; link rel =&quot; icon&quot; type =&quot; image / png&quot; href =&quot; /static/favicon/favicon-16x16.png" size =&quot; 16x16&quot;&gt; &lt; link rel =&quot; icon&quot; type =&quot; image / png&quot; href =&quot; / static / favicon / favicon-32x32.png&quot; size =&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"> &lt; meta name =&quot; msapplication-config&quot; content =&quot; /static/favicon/browserconfig.xml" &gt; &lt;!-外部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;!-外部フォント-&gt; &lt; link href =&quot; // maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel =&quot;スタイルシート&quot;&gt; &lt; link href =&#x27; // fonts.googleapis.com/css?family = Open + Sans:300,600&#x27; rel =&#x27;スタイルシート&#x27; type =&#x27; text / css&#x27;&gt; &lt; link href =&#x27; // fonts.googleapis.com/css?family = Lora:400,700&#x27; rel =&#x27;スタイルシート&#x27; type =&#x27; text / css&#x27;&gt; &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"&gt;&lt; / script&gt; &lt;![endif]-&gt; &lt;!-サイトCSS-&gt; &lt; link rel =&quot; stylesheet&quot; type =&quot; text / css&quot; href =&quot; /static/css/style.css"> &lt; link rel =&quot; stylesheet&quot; type =&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; row&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; row&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; 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。ジェリー・ブラウンは、テッド・クルーズは&amp;#39;絶対に不適当&amp;#39;だと言います 気候変動の見方のためにオフィスに立候補する&lt; / a&gt;&lt; / h2&gt; &lt; h4&gt;サム・レヴァイン&lt; / h4&gt; &lt; div class =&quot; article&quot;&gt; &lt; p&gt;カリフォルニア州知事のジェリー・ブラウン(D)は日曜日、テキサス州上院議員のテッド・クルーズ(R-テキサス)は「公職に立候補するのは絶対に不適当」だと述べた。気候変動に関する彼の立場のためです。&lt; / p&gt; &lt; p&gt;&quot;ニューハンプシャーから戻ってきたところです。ニューハンプシャーでは雪と氷がいたるところにあります。これについての私の見解は単純です。これに関する議論は科学に従うべきであり、データに従うべきであり、地球温暖化に関する多くの警戒者は、科学がそれらをバックアップしないので、彼らは問題を抱えています。Cruz&lt; a href =&quot;https://www.youtube.com/watch?v=m0UJ_S​​c0Udk&quot;&gt;said&lt ; / a&gt; 「セス・マイヤーズとの深夜」に 先週。&lt; / p&gt; &lt; p&gt;彼の主張を裏付けるために、クルスは過去17年間に重大な温暖化の欠如を示した衛星データを引用しました。しかし、クルスの推論&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;ポリティファクトによって暴かれた&lt; / a&gt;は、科学者が気候が引き続き温暖化すると信じる十分な証拠を持っていることを示しています。&lt; / p&gt; &lt; p&gt;&quot;彼の言ったことは絶対に間違っている」とブラウンは&lt; a href =&quot;で言った。http://www.nbcnews。 unfit-be-running-n328046&quot;&gt; NBC&#x27; s&quot; Meet the Press。&quot;&lt; / a&gt; 彼はそれを&lt; a href =&quot;と付け加えました。http://climate.nasa.gov/scientific-consensus/&quot;&gt ; 90%以上&lt; / a&gt; 気候を研究する科学者の多くは、気候変動は人間の活動によって引き起こされることに同意しています。「あの男は、そのようなレベルの無知と既存の科学データの直接の改ざんを引き起こしました。それは衝撃的であり、人は自分自身をオフィスに立候補するのに絶対に不適格にしたと思います。」ブラウンは言った。&lt; / p&gt; &lt; p&gt;ブラウンは、気候変動には&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;彼の州で干ばつが発生しました&lt; / a&gt ;、東海岸でひどい風邪や嵐が発生しました。&lt; / p&gt; &lt; p&gt;クルスはニューハンプシャーのいたるところに雪と氷を見たかもしれませんが、データは国が実際に&lt; a href =&quot;を経験していることを示しています。http://www.huffingtonpost.com/2015/02/19/cold-weather- winter_n_6713104.html&quot;&gt;平均より暖かい&lt; / a&gt; 冬。&lt; / p&gt; &lt; p&gt;ブラウンのクルスに対する批判は、テキサス上院議員が&lt; a href =&quot;を発表するように設定される1日前に行われます。http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html">大統領選挙運動&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;オリジナルを表示&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"&gt;&lt; / script&gt; &lt; script src =&quot; /static/js/modal.js"&gt;&lt; / script&gt; &lt; script src =&quot; /static/js/bootbox.min.js"></script> &lt; script src =&quot; /static/js/site.js"&gt;&lt; / script&gt; &lt;スクリプト&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','ga'); 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; "


デバッグのヘルプを求める質問(「このコードが機能しないのはなぜですか?」)には、目的の動作、特定の問題またはエラー、および質問自体にそれを再現するために必要な最短のコードを含める必要があります。「最小限の再現可能な例を作成する方法」を参照してください。
ブリキの

回答:


55

ここでコードを変更しました:

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

}

ここに画像の説明を入力してください


10

このコードを試してください、

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

これを試して:

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();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.