Удалить тег & # 8203 в теме WP [дубликат]

Это одно из самых запутанных сообщений об ошибках, которые каждый программист VC ++ видел снова и снова. Давайте сначала сделаем чёткость.

A. Что такое символ? Короче говоря, символ - это имя. Это может быть имя переменной, имя функции, имя класса, имя typedef или что-либо кроме тех имен и знаков, которые принадлежат языку C ++. Он определяется пользователем или вводится библиотекой зависимостей (другой пользовательский).

B. Что является внешним? В VC ++ каждый исходный файл (.cpp, .c и т. Д.) Рассматривается как единица перевода, компилятор компилирует по одному модулю за раз и генерирует один объектный файл (.obj) для текущей единицы перевода. (Обратите внимание, что каждый заголовочный файл, включенный в этот исходный файл, будет предварительно обработан и будет рассматриваться как часть этой единицы перевода). Все внутри единицы перевода считается внутренним, все остальное считается внешним. В C ++ вы можете ссылаться на внешний символ, используя ключевые слова, такие как extern, __declspec (dllimport) и т. Д.

C. Что такое «решимость»? Resolve - термин времени связывания. Во время компоновки линкер пытается найти внешнее определение для каждого символа в объектных файлах, которые не могут найти свое определение внутри. Объем этого процесса поиска, включая:

  • Все объектные файлы, сгенерированные во время компиляции
  • Все библиотеки (.lib), которые явно или неявно указаны как дополнительные зависимости это строительное приложение.

Этот процесс поиска называется разрешением.

D. Наконец, почему Unresolved External Symbol? Если компоновщик не может найти внешнее определение для символа, который не имеет определения внутри, он сообщает об ошибке неразрешенного внешнего символа.

E. Возможные причины LNK2019: ошибка неразрешенного внешнего символа. Мы уже знаем, что эта ошибка связана с тем, что компоновщик не смог найти определение внешних символов, возможные причины могут быть отсортированы как:

  1. Определение существует

Например, если у нас есть функция foo, определенная в a.cpp:

int foo()
{
    return 0;
}

В b.cpp мы хотим вызвать функцию foo, поэтому добавим

void foo();

, чтобы объявить функцию foo () и вызвать ее в другом теле функции, скажем bar():

void bar()
{
    foo();
}

Теперь, когда вы создаете этот код, вы получите ошибку LNK2019, жалуясь, что foo является неразрешенным символом , В этом случае мы знаем, что foo () имеет свое определение в a.cpp, но отличается от того, которое мы вызываем (другое возвращаемое значение). Это означает, что определение существует.

  1. Определение не существует

Если мы хотим вызвать некоторые функции в библиотеке, но библиотека импорта не добавлен в дополнительный список зависимостей (установленный из: Project | Properties | Configuration Properties | Linker | Input | Additional Dependency) вашего проекта. Теперь компоновщик сообщит LNK2019, поскольку определение не существует в текущей области поиска.

25
задан gwg 28 August 2013 в 05:05
поделиться

6 ответов

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

Что происходит в валидаторе и в инструментах 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 могут начинаться с этого символа, также известного как знак порядка байтов ( BOM ), когда они появляются в начале данных. Использование U + 200B вместо U + FEFF звучит как ошибка, которую программное обеспечение вряд ли сделает, но люди могут ошибаться таким образом, если они думают об именах Unicode символов .

26
ответ дан Jukka K. Korpela 27 August 2018 в 22:59
поделиться

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

1
ответ дан Drew McDowell 27 August 2018 в 22:59
поделиться

Я понимаю, что в 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-do-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
8
ответ дан grmdgs 27 August 2018 в 22:59
поделиться

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

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

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

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

0
ответ дан Sandy Abrah 27 August 2018 в 22:59
поделиться

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

$(function(){
    $('body').contents().eq(0).each(function(){
        if(this.nodeName.toString()=='#text' && this.data.trim().charCodeAt(0)==8203){
            $(this).remove();
        }
    });
});
-1
ответ дан Sean Schricker 27 August 2018 в 22:59
поделиться

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

$( document ).ready(function() {
    var abc = document.body.innerHTML;
    var a = String(abc).replace(/\u200B/g,'');
    document.body.innerHTML = a;
});
4
ответ дан Tarek Salah uddin Mahmud 27 August 2018 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: