0

そのため、Node.js を使用して次の HTML をブラウザーに送信しました。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <form action="/upload" method="post">
        <textarea name="text" rows="20" cols="60"></textarea>
        <input type="submit" value="Submit text" />
    </form>
</body>
</html>

しかし、ブラウザには真っ白な空白のページが表示されています。ただし、ソースを表示すると、Chrome の「ソースの表示」ユーティリティからコピーして貼り付けただけの上記の内容が正確に表示されます。Chrome がその HTML を空白のページとしてレンダリングするのはなぜですか? 以下にスクリーンショットがあります。

これは、HTML をブラウザーに送信するために使用している Node.js コードです。

function start(response) {
    console.log("Request handler 'start' was called.");
    var body = '<!DOCTYPE html>\n'+
               '<html>\n'+
               '<head>\n'+
               '    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n'+
               '</head>\n'+
               '<body>\n'+
               '    <form action="/upload" method="post">\n'+
               '        <textarea name="text" rows="20" cols="60"></textarea>\n'+
               '        <input type="submit" value="Submit text" />\n'+
               '    </form>\n'+
               '</body>\n'+
               '</html>\n';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

空白のページ -- Chrome が表示できる優れた HTML にもかかわらず...

==================================

このトピックは閉鎖されたため、元の投稿への編集として含まれている回答は次のとおりです (回答されていないトピックが投稿者以外によって閉鎖される可能性があるのは残念です)。とにかく、元のポスターがこれに従っている場合に備えて、私はまったく同じ問題を抱えていたので、この問題を掘り下げました.誰も彼の質問に答えなかったので、解決策を発見しました:

Kindle 本から選択したテキスト/ソース コード エディターにコード スニペットをコピーするというこの問題を解決しました。これと同じトピックが、「なぜ Chrome はこの HTML を完全に空白のページとしてレンダリングするのか? Node.js から、The Node Beginner Book [closed]」というタイトルの stackoverflow.com の投稿で議論されました。その特定の投稿は、私が経験したのとまったく同じ問題を説明しています (同じ Kindle 本、同じコード スニペット、同じコードの症状です!)。残念ながら、回答者のいずれかが正確な回答を提供する前に、その投稿は時期尚早に閉じられました。そうでなければ、私はその投稿に返信していたでしょう.

しかし、私はこの問題をより深く掘り下げ、Kindle 本からコード スニペットをコピーするときの問題の根本原因を発見しました。Kindle アプリからテキストをコピーするとき、スペース文字には 0x20 ではなく 16 進コード 0xA0 を使用します。16 進コード 0xA0 は、改行しない空白の拡張 ASCII です。前述の投稿の場合のように、HTML リテラル文字列をコピー アンド ペーストすることを期待している場合、これは機能しません。

したがって、これは前述の投稿の動作を説明しています。元の投稿者は、すべてのテキストを手動で再入力することで問題を回避できることを示していました。これは、手動での再入力が適切な 0x20 を使用していたためです。

これには、最初は理解できなかった他の症状がありましたが、現在説明されています: テキスト エディター (メモ帳++) が、ソース コード内の予約済みキーワードを正しく識別していませんでした。これも、キーワードが 0x20 ではなく 0xA0 で区切られているためです。Notepad++ のキーワード パーサーは、0x20 からトークン化する必要があります。

解決策: Kindle からテキストを貼り付けた後、ソース コード エディターの正規表現検索機能を使用して検索と置換を実行します。正規表現 \xA0 を検索し、\x20 に置き換えます (または、エディターによっては、[置換] フィールドに単一のスペース バー文字を入力するだけです [これが Notepad++ の動作です])。

4

3 に答える 3

2

nodejs.orgのサーバー サンプル コードを使用すると、HTML バージョン 23.0.1271.64 で正常に動作します。

var http = require('http');
http.createServer(function (req, res) {
  var body = '<!DOCTYPE html>\n'+
         '<html>\n'+
         '<head>\n'+
         '    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n'+
         '</head>\n'+
         '<body>\n'+
         '    <form action="/upload" method="post">\n'+
         '        <textarea name="text" rows="20" cols="60"></textarea>\n'+
         '        <input type="submit" value="Submit text" />\n'+
         '    </form>\n'+
         '</body>\n'+
         '</html>\n';
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write(body);
  res.end();
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/');

レガシーが言ったように、それは何か別のものでなければなりません

于 2012-11-23T19:15:08.343 に答える