我正在寻找做某种“智能”HTML编码的最佳方法。例如:
From: <a>Next >></a> to: <a>Next gt;gt;</a>
From: <p><a><b><< Prev</b></a><br/><a>Next >></a></p> to: <p><a><b><< Prev</b></a><br/><a>Next gt;gt;</a></p>因此,只有文本的非XML / HTML部分才会被编码,就好像调用了HtmlEncode一样。
有什么建议吗?
编辑:这应该是尽可能轻量级的。传入的文本将来自没有HTML编码知识的用户。
发布于 2009-08-04 13:29:32
是:永远不要在源代码中写入HTML。相反,使用像DOM这样的API可以为您解决所有编码问题。
发布于 2009-08-04 13:31:51
如果你想要一个可靠的、完全可靠的C#解决方案(但是很重),那么我会使用HTML Agility Pack library。然后,您可以遍历节点并对内容进行HTML编码。它比正则表达式更安全一些,但显然更强烈。
如果你想在客户端做到这一点,那就使用JQuery。参见Encode HTML entities with jQuery。
发布于 2009-08-04 13:53:05
您可能正在尝试解决错误的问题。(我知道这不是你想听到的。)
如果允许用户将未编码的>>和<<写入HTML,那么他们大概也能够编写<>或<b>,在这种情况下,您无法可靠地区分文本和标记。(不要担心这会使您容易受到XSS攻击。)
在将文本插入到HTML之前,您确实需要截取文本并对其进行编码。也许你应该解释一下导致你问题的工作流程。一定有更好的方法来解决这个问题。
Edit in response to comment:根本没有办法对同时可以是文本或HTML的输入进行可靠的编码。无论如何,如果用户有足够的技术能力来输入原始HTML,那么他们大概能够编写实体-否则就不应该首先输入原始HTML。如果HTML输入仅供高级用户使用,那么您可以使用一个复选框来指示输入是文本还是HTML。但是您可能应该考虑使用富文本编辑器。
https://stackoverflow.com/questions/1227529
复制相似问题