【问题标题】:Escaping HTML characters in JSP without special library在没有特殊库的情况下在 JSP 中转义 HTML 字符
【发布时间】:2013-11-25 08:58:50
【问题描述】:

我是一家软件公司的新程序员,我只能说我不能进行包括重大更改的太多修改,例如添加库。在当前的项目中,我们使用 JSP 和 Servlet,以及其他一些我从来不知道的高级 GUI(他们说它是 Eclipse 的衍生产品,称为 Enfinity)。 Enfinity 还将库隐藏在不知名的位置,这与 Java 中的非常不同。所以我想我也无法了解图书馆的位置,此外还添加了一些新图书馆。

这里的问题,我需要转义 HTML 字符,如 &、、" 和 ',但是当我在互联网上搜索解决方案时,通常解决方案涉及使用 JSTL ( c:out 或 ${fn:escapeXML } )或导入库(Spring 的 HTMLEscape 或 Apache 的 StringEscapeUtils)。另一方面,JQuery 已导入,但遗憾的是,与解决方案无关。但问题是 JSTL 不是库的一部分,可轻松导入项目。 Java、JSP 和 Servlet 对我来说有点新,因为我在大学里根本没有学过 Java,所以我也不知道 JSP 中的标准库是什么(已经存在,无需我物理添加) . 我什至不知道 Apache 的 StringEscapeUtils 是否存在。您对我的情况下应该如何转义 HTML 字符有任何建议/代码吗?非常感谢。

【问题讨论】:

标签: java jsp servlets html-escape-characters intershop


【解决方案1】:

如果您的目标平台确实是 Enfinity - 正如您在问题和标签中所述 - 您应该使用 Enfinity 构造,即使这不是您从 JSP 中完全了解的内容。请允许我重新打开这个旧线程并尝试帮助您。

Enfinity 拥有自己的“模板语言”,称为 ISML。最后,ISML 被预编译为 JSP。您可以找到任何 Enfinity 应用程序服务器安装的文档(名为 enfsuite_dev_programming 的 PDF)。如果没有,您应该询问您的项目经理或构建工程师。

另一方面,我从您的声明中了解到,您可能拥有可用的 Enfinity Studio(它是 Enfinity 的 IDE - Eclipse 的一个衍生版本。您应该能够通过 Enfinity Studios 帮助菜单访问开发人员指南。此菜单不幸的是,在某些版本的 Studio 中可能存在一些错误。但是,您可以通过 Window > Show View > Other > Help 到达那里。帮助窗口底部是一个“内容”链接,可将您带到概述。开发人员指南位于目录链接 Enfinity Suite 应用程序编程指南下方。

但是您可以查看指南:在附录中您可以找到“参考 > ISML 标签/ISML 功能/ISML 模块”部分。浏览它你会发现它的功能:

<isprint value="#value#" encoding="on|off">

Encoding 默认为“on”,此语句将完全满足您的需求:它将对#value# 中的所有 HTML 特殊字符进行编码。这里的特殊之处在于,键值与所谓的管道字典中的对象匹配,这是一种存储来自 Enfinity 业务逻辑工作流层(所谓的管道)的对象的构造。

这个管道字典可以在 JSP 中使用:

Map<String, Object> pdict = getPipelineDictionary();

字典是一个标准的java Map,可以使用已知的操作进行操作。但是,首选方法是使用管道或至少使用相应的 ISML 标签

<isset name="name" value="#value#" scope="request|session">

使用 JSP/ISML 的完整示例如下:

<%
String myString = "<b>Test</b>";
getPipelineDictionary().put("myDictKey", myString);
%>
<isprint value="#myDictKey#">

【讨论】:

  • 嗨!终于有人能理解我在说什么程序了!我使用的是编码为 ON 的 ISPRINT,但一些未编码的字符仍在通过。如果没有,我不会惊慌失措地寻找解决方案。我的主管告诉我改用 ISHTMLPRINT,但同样的事情仍然发生。经过大量可怕的尝试 n 错误后,我终于求助于最手动的解决方案:创建我自己的自定义 ISML 标签,因为这允许我使用 java 库来解决这个问题。但我也从你的回答中学到了一些新东西。感谢您的描述性和明确的回答!
【解决方案2】:

您可以导入 org.apache.commons.lang.StringEscapeUtils 并添加其 jar 文件。默认情况下,jsp/servlet 中不存在这些内容。它将为您提供从 html、mysql、xml 等中转义字符的工具。您也可以创建自己的方法来检查字符序列,然后将其用作转义函数来转义您想要的数据。

【讨论】:

  • 在此板上回答问题时不要使用 SMS 缩写。打出“你”这个词;要有礼貌。
  • 最后,我最终为它创建了自己的代码。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多