Безопасное преобразование кода C++ в HTML

StackOverflow https://stackoverflow.com/questions/101604

  •  01-07-2019
  •  | 
  •  

Вопрос

Я решил попробовать http://www.screwturn.eu/ wiki как утилита для хранения фрагментов кода.Пока что я очень впечатлен, но меня раздражает то, что когда я копирую и вставляю свой код, который хочу сохранить, '<' и '[' (http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Character_references) неизменно портят выходные данные, поскольку вики интерпретирует их как вики-теги или HTML-теги.

Кто-нибудь знает способ обойти это?Или, если это не удастся, знаете простую утилиту, которая принимает код C++ и преобразует его в безопасный код HTML?

Это было полезно?

Решение

Окружите свой код <nowiki>..Теги </новики>.

Другие советы

Вы можете использовать @@...@@ тег, чтобы экранировать код и автоматически обернуть его ПРЕДВАРИТЕЛЬНО теги.

Я не разбираюсь в утилитах, но уверен, что вы могли бы написать очень простое приложение, выполняющее поиск/замену.Для отображения угловых скобок достаточно заменить их на &gt; и &lt; соответственно.Что касается квадратных скобок, то, по-моему, это специфическая проблема вики с уценкой.

Дарио Солера написал: «Вы можете использовать тег @@...@@, чтобы экранировать код и автоматически обернуть его тегами PRE».

Если вы не хотите, чтобы он был завернут, просто используйте: <esc></esc>

Список символов, которые нужно экранировать:

  • < (знак меньше чем)
  • & (амперсанд)
  • [ (открывающая квадратная скобка)

Пробовали ли вы обернуть свой код в HTML-теги pre или code перед вставкой?Оба позволяют использовать любые специальные символы (например, '<'), не интерпретируя их как html.pre также учитывает форматирование содержимого.

пример

<pre>
    if (foo <= bar) {
        do_something();
    }
</pre>

Чтобы разместить код C++ на веб-странице, вам следует сначала преобразовать его в действительный HTML, что обычно требует использования HTML-символы, как отмечали другие.Это не ограничивается заменой < и > с &lt; и &gt;.Рассмотрим следующий код:

unsigned int maskedValue = value&mask;

Ой-ой, а HTML DTD содержит объект под названием &mask;?Лучше заменить & с &amp; также.

Двигаясь в альтернативном направлении, можно избавиться от [ и ] заменив их на триграфы ??( и ??).В C++ триграфы и орграфы — это последовательности символов, которые можно использовать для представления определенных символов, доступных не во всех наборах символов.Однако они вряд ли будут распознаны большинством программистов C++.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top