Точно скрыть HTML-сущности в javascript

0

В javascript мне нужно взять строку и HTML, чтобы избежать ее.

Этот вопрос здесь задает тот же вопрос, и самый популярный ответ предполагает заполнение временного div.

Я тоже использовал это, но я думаю, что нашел ошибку.

Простой пример, правильное поведение

Если у вас есть эта строка: Cats & gt; Dogs

Unescaped, это должно быть: Кошки> Собаки

Неправильный пример, неправильное поведение

Если вы удалите точку с запятой и вместо этого используете это: Cats & gtdogs

Вы получите это как результат: Кошки> Собаки

Разве это не так?

Это показалось мне странным. Из того, что я понимаю, строка с экранированием требует наличия конечной точки с запятой, иначе она не будет удалена. В конце концов, что, если бы у меня был магазин под названием гитары и усилители? Насколько нам известно, эта компания существует, но не имеет бизнеса, поскольку она вызывает исключения нулевой ссылки везде, где есть записи.

Любые идеи о том, как я мог бы убежать, сознательно избегая побега, когда точка с запятой отсутствует? В настоящее время все, что я могу сделать, это выполнить самозахват.

(Предварительный просмотр WYSIWYG в StackOverflow, кстати, демонстрирует подобное необычное поведение. Попробуйте ввести & ampgt;, это отобразится как & gt ;!)

  • 0
    В итоге я решил написать решение этой проблемы вручную. Я смог сузить свой вариант использования до того, который нужен только для положительной идентификации простых переходов HTML.
Теги:
escaping

1 ответ

2
Лучший ответ

Разве это не так?

Успешные HTML-парсеры терпимы. Это одна из отличительных черт, например, XML-парсеров. Они не обязательно придерживаются строгих правил о разметке, по той простой причине, что там много неправильной разметки. Поэтому они пытаются понять, что означает разметка. &gtDogs более вероятно, означает >Dogs than &gtDogs, так что с парсером идет.

  • 0
    Я согласен, что толерантные парсеры HTML имеют свое применение. Я не хочу быть грубым, но это не решает проблему. В моей ситуации я надеюсь помочь моим пользователям тщательно ввести именно то, что они хотят. Пользовательский ввод в конечном счете используется другими системами, которые я не могу гарантировать, терпимы. Другими словами, я хочу, чтобы пользователи могли видеть, правильно ли они отформатировали или нет. Если бы я полагался на толерантность здесь, есть риск, что другие системы не будут читать правильно.
  • 0
    @JohnnyKauffman: Чтобы сделать это, я думаю, вы должны будете сделать проверку самостоятельно. Из ваших экспериментов видно, что вы не можете полагаться на браузер, потому что он будет стараться быть терпимым. Доступен список именованных символьных сущностей, и это легко проверить числовые сущности. Конечно, это только одна маленькая часть проблемы. Чтобы провести серьезную проверку, вы можете посмотреть на интеграцию с валидатором W3C .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню