29

編集:ここで問題を見ることができます(ソースを見てください)。

EDIT2:興味深いことに、ソースの問題ではありません。コンソールのみ (Firebug も)。

というファイルに次のマークアップがありますtest.html

​<!DOCTYPE html>
<html>
<head>
    <title>Test Harness</title>
    <link href='/css/main.css' rel='stylesheet' type='text/css' />
</head>
<body>
    <h3>Test Harness</h3>
</body>
</html>

しかし、Chrome では次のように表示されます。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    "&#8203;


        "
    <title>Test Harness</title>
    <link href='/css/main.css' rel='stylesheet' type='text/css' />
    <h3>Test Harness</h3>
</body>
</html>

̢は幅ゼロのスペースのように見えますが、何が原因でしょうか? Sublime Text 2 を UTF-8 エンコーディングで使用し、Google App Engine を Jinja2 で使用しています (ただし、Jinja は単純にロードしていtest.htmlます)。何かご意見は?

前もって感謝します。

4

8 に答える 8

28

ソースの問題です。あなたが提供したライブの例は、次のバイトで始まります (つまり、それらは の前に表示されます<!DOCTYPE html>): 0xE2 0x80 0x8B. これは、Rex Swain のHTTP ビューアーを使用して、[表示形式] で [16 進数] を選択することで確認できます。また、W3C Markup Validator を使用してページを検証すると、ドキュメントの先頭に何か非常に問題があることを示唆する情報が得られることにも注意してください。 </p>

バリデーターと Chrome ツール (および Firebug など) で発生することは、バイト 0xE2 0x80 0x8B が文字データとして取得され、暗黙的に要素を開始することです (文字データは要素内またはその前にbody有効に表示できないため) head、その前に空のhead要素があることを意味します。

もちろん、解決策はそれらのバイトを削除することです。通常、ブラウザーはそれらを無視しますが、このようなエラー処理に依存するべきではありません。また、このバイトにより有用な HTML 検証が妨げられます。それらをどのように削除するか、また最初にどのようにしてそこに到達したかは、オーサリング環境によって異なります。

ページは (HTTP ヘッダーで) UTF-8 エンコードとして宣言されているため、これらのバイトはゼロ幅スペース(U+200B) 文字を表します。目に見えるグリフも幅もありません。そのため、ブラウザーがbody要素の開始時にデータとして処理しても、視覚的な表現には何も気付かないでしょう。表記&#8203;は文字参照であり、通常は見えない文字の存在を示すためにブラウザー ツールで使用されると思われます。

HTML ドキュメントを作成したソフトウェアが、代わりにZERO WIDTH NO-BREAK SPACE (U+FEFF) を挿入することを意図していた可能性があります。特別な規則により、UTF-8 でエンコードされたデータはこの文字で始まる場合があり、データの先頭に表示される場合はバイト オーダー マーク ( BOM ) とも呼ばれます。U+FEFF の代わりに U+200B を使用することは、ソフトウェアが行う可能性が低いエラーのように聞こえますが、文字の Unicode名を考えると、人間はそのように誤解される可能性があります。

于 2013-08-28T05:20:40.530 に答える
9

SharePoint 2013 には、HTML エディターがこれらの文字をコンテンツに追加するというバグがあることを理解しています。

私はこれを少し扱っ​​てきましたが、これが私が使用している解決策であり、機能しているようです。この JavaScript をマスターページが参照するファイルに追加しました。

var elements = ["h1","h2","h3","h4","p","strong","label","span","a"];
function targetZWS(){
    for (var i = 0; i < elements.length; i++) {
      jQuery(elements[i]).each(function() {
        removeZWS(this);
      });
    }
}
function removeZWS(target) {
  jQuery(target).html(jQuery(target).html().replace(/\u200B/g,''));
}

/*load functions*/
$(document).ready(function() {
    _spBodyOnLoadFunctionNames.push("targetZWS");

});

これを調査するために調べたリンク:

  1. https://social.msdn.microsoft.com/Forums/sharepoint/en-US/23804eed-8f00-4b07-bc63-7662311a35a4/why-does-sharepoint-put-in-character-code-8203-in-a- richtext-field?forum=sharepointdevelopment

  2. https://social.technet.microsoft.com/Forums/office/en-US/e87a82f0-1ab5-4aa7-bb7f-27403a7f46de/finding-8203-unicode-characters-in-my-source-code?forum=sharepointgeneral

  3. http://www.sharepointpals.com/post/Removing-8203-in-RichTextHTML-field-Sharepoint

于 2016-04-14T18:18:11.963 に答える
4

このスクリプトを試してください。わたしにはできる

$( document ).ready(function() {
    var abc = document.body.innerHTML;
    var a = String(abc).replace(/\u200B/g,'');
    document.body.innerHTML = a;
});
于 2016-07-26T12:22:52.667 に答える
2

私はこれを、私が取り組んでいた主要なプロジェクトで経験しました。

トリックは次のとおりです。

  • コード全体をメモ帳にコピーします。

  • テキストファイルとして保存します。

  • ファイルを閉じます。
    もう一度開いて、コードを IDE環境にコピーして戻します。

そしてその出来上がり、それはなくなった.!

于 2016-10-27T17:18:29.167 に答える
1

周囲の文字を選択し、[検索と置換] にコピー/貼り付けすることで、Sublime でこれらを削除できました。

于 2016-07-21T15:09:18.487 に答える
-2

ページのどこに注入されているかわかりません。後で詳しく調査しますが、今のところ、作業を続けることができるように、これを自分のページに放り込みました。

$(function(){
    $('body').contents().eq(0).each(function(){
        if(this.nodeName.toString()=='#text' && this.data.trim().charCodeAt(0)==8203){
            $(this).remove();
        }
    });
});
于 2016-02-09T05:23:54.933 に答える