因此,我有一个具有显示解析的XML内容的表的角8应用程序,但是在某些情况下,字符串可以包含
需要解析为HTML的标记,但也需要以小于/大于符号的形式支持其他内容,例如。我使用innerHTML将它注入到一个标记中,但是这些带大括号的字符串被剪掉了。我试过像这样使用DomSanitizer:
public sanitizeDsxText(text: any): any {
return this.sanitizer.bypassSecurityTrustHtml(text);
}
但不幸的是,这也不起作用。有没有人面临过类似的问题,并能提供一个简单的解决方案?我会非常感激的:)
编辑:根据要求,更准确地说。我有一个这样的:
<td class="dsx-table__cell" [innerHTML]="item.target?.txt">
</td>
"item.target?.txt“中的文本如下:"Cześć wam, tu bliźniaki dwa <br/> Paprika – siostra, brat <FAR/OFF>" *
<bt/>
被解析为正常的<br>
标记,但是<FAR/OFF>
被删除了--我需要找到一种方法来解析<br>
,并将其他字符串保留在括号中而不是解析。
发布于 2019-08-14 10:46:56
结果不是太复杂就是不可能使用DomSanitizer,所以我们选择的解决方案是在后端对它进行不同的解析-
标签通常在JSON响应中返回,但是"<>“中的其他字符串都用HTML代替了它,并且它的工作方式也应该是这样的。
发布于 2021-07-27 09:10:42
我去派对迟到了。我已经创建了一个有角度的管道,它允许您有选择地允许标记,或者可以选择将它们转换为HTML实体。
下面是代码:
import { Pipe, PipeTransform } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
import DOMPurify from "dompurify";
@Pipe({
name: "safeHtml",
})
export class SafeHtmlPipe implements PipeTransform {
constructor(private domSanitizer: DomSanitizer) {
// How to securely allow target attribute
// https://github.com/cure53/DOMPurify/issues/317
DOMPurify.addHook("afterSanitizeAttributes", function (node: Element) {
// set all elements owning target to target=_blank
if ("target" in node) {
(node as Element).setAttribute("target", "_blank");
(node as Element).setAttribute("rel", "noopener");
}
});
}
transform(html: string, convertToEntity: boolean, additionalTags?: string[]): string {
if (html.length > 0) {
// we don't want tags such as `<input>` or any form elements
// from being displayed, and at the same time allows certain
// tags element for styling
const sanitizeOptions = {
FORBID_TAGS: ["script", "form", "input", "select", "textarea"],
ADD_TAGS: ["b", "i", "em", "span"],
ALLOW_UNKNOWN_PROTOCOLS: true,
// NOTE: we enable this one if in case the addHook method has unexpected behavior
// ADD_ATTR: ["target"],
};
if (additionalTags && additionalTags.length) {
sanitizeOptions.ADD_TAGS.push(...additionalTags);
}
let sanitizedContent = html;
if (convertToEntity) {
sanitizedContent = this.escapeHtml(html);
} else {
sanitizedContent = DOMPurify.sanitize(html, sanitizeOptions);
}
return this.domSanitizer.bypassSecurityTrustHtml(sanitizedContent) as string;
}
return html;
}
private escapeHtml(str: string): string {
// DOMSanitizer or DOMPurify doesn't have options to convert special characters
// to html entities
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
}
用法:
img
和a
标记<div class="modal-body" [innerHTML]="message | safeHtml: false:['img', 'a']"></div>
<p [innerHTML]="content | safeHtml: true"></p>
https://stackoverflow.com/questions/57429062
复制相似问题