Подтвердить что ты не робот

Почему "" вводится в мой HTML?

EDIT: вы можете увидеть проблему здесь (смотрите в исходном тексте).

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>

Похоже, & # 802 - это пространство с нулевой шириной, но что вызывает его? Я использую Sublime Text 2 с кодировкой UTF-8 и Google App Engine с Jinja2 (но Jinja просто загружает test.html). Любые мысли?

Спасибо заранее.

4b9b3361

Ответ 1

Это проблема в источнике. живой пример, который вы предоставили, начинается со следующих байтов (т.е. Они появляются до <!DOCTYPE html>): 0xE2 0x80 0x8B. Это можно видеть, например, используя Rex Swains HTTP Viewer, выбрав "Hex" в разделе "Формат отображения". Также обратите внимание, что проверка страницы с помощью W3C Markup Validator дает информацию о том, что в начале документа есть что-то очень неправильное, особенно сообщение "Строка 1, столбец 1: символы без пробела, найденные без первого вида документа".

Что происходит в валидаторе и в инструментах Chrome, а также, например, в Firebug - это то, что байты 0xE2 0x80 0x8B берутся как символьные данные, которые неявно запускают элемент body (так как символьные данные не могут корректно отображаться в элементе head или перед ним), подразумевая пустой элемент head до он.

Решение, конечно же, состоит в том, чтобы удалить эти байты. Браузеры обычно игнорируют их, но вы не должны полагаться на такую ​​обработку ошибок, а байты предотвращают полезную проверку HTML. Как вы их удаляете, и как они попали туда, в первую очередь, зависит от вашей среды разработки.

Поскольку страница объявлена ​​(в заголовках HTTP) как кодированная UTF-8, эти байты представляют ZERO WIDTH SPACE (U + 200B ) персонаж. Он не имеет видимого глифа и ширины, поэтому вы не заметите ничего в визуальном представлении, даже если браузеры рассматривают его как данные в начале элемента body. Обозначение &#8203; является символьной ссылкой для него, предположительно используемой средствами браузера, чтобы указать на наличие обычно невидимого символа.

Возможно, что программное обеспечение, которое создало документ HTML, предназначалось для вставки ZERO WIDTH NO-BREAK SPACE (U + FEFF). Это было бы справедливо, поскольку по специальному соглашению кодированные данные UTF-8 могут начинаться с этого символа, также известного как знак порядка байтов (спецификация) при появлении в начале данных. Использование U + 200B вместо U + FEFF звучит как ошибка, которую программное обеспечение вряд ли сделает, но люди могут ошибаться таким образом, если они думают об именах символов Unicode.

Ответ 2

Я понимаю, что в 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");

});

Ссылки Я изучил это:

Ответ 3

Попробуйте это script. Это работает для меня

$( document ).ready(function() {
    var abc = document.body.innerHTML;
    var a = String(abc).replace(/\u200B/g,'');
    document.body.innerHTML = a;
});

Ответ 4

Мне удалось удалить их в Sublime, выбирая символы, окружающие его, и копировать/вставлять в Find and Replace.

Ответ 5

Я испытал это в крупном проекте, над которым я работал.

Фокус в том, чтобы просто:

  • скопировать весь код в блокнот.

  • сохранить его как текстовый файл.

  • закрыть файл. откройте его снова и скопируйте свой код обратно в свою IDE
    окружающая среда.

и его voilà, он ушел.!

Ответ 6

В моем случае символ "&#8203;" не появился в редакторе кода MS Code и был виден только на вкладке Elements Chrome. Это помогло удалить тег, после которого появился этот символ, и перепечатка этого тега была снова написана от руки, по-видимому, этот символ цеплялся за ctrl + c/ctrl + v во время передачи кода.

Ответ 7

Я не могу найти, где он был введен на моей странице. Я буду исследовать его более поздно, но пока, я просто бросил это на моей странице, чтобы я мог продолжать работать.

$(function(){
    $('body').contents().eq(0).each(function(){
        if(this.nodeName.toString()=='#text' && this.data.trim().charCodeAt(0)==8203){
            $(this).remove();
        }
    });
});