【问题标题】:freemarker replace & and &freemarker 替换 & 和 &
【发布时间】:2018-12-26 11:22:29
【问题描述】:

我对 Freemarker 有疑问。 我想把这句话中的所有特殊字符去掉,以后也想去掉一些类似的句子:

BLA BLA RANDOM &, RANDOM BLA

特别是&,但是平台也使用HTML,所以用下面的代码:

> <#assign text1 = name?replace("[^a-zA-Z0-9. ]", "",'r')>
>${text1}

我明白了:

BLA BLA 随机放大器 RANDOM BLA

我也在尝试这样的方法,它会删除 &amp,但我如何添加一些特殊的东西,比如 !@#$%^90 以防万一出现在其中?

> <#assign text1 = name?replace('&amp;,', '')>

【问题讨论】:

  • 尝试用&lt;#outputformat "undefined"&gt;/&lt;/#outputformat&gt;包装代码。我猜你当前的输出格式设置为 HTML,请检查 ${.output_format}
  • ${.output_format} 我得到 undefined / 也与 >/#outputformat> 我得到相同的结果
  • 我想如果所有其他方法都失败了,您可以再次检查并将\bamp\b替换为""
  • 您应该只针对纯文本运行正则表达式,而不是转义。您需要检查字符串在哪里转义,或者如何禁用该功能。
  • 简单地删除特殊字符是一件奇怪的事情......你确定这是他们想要的吗?

标签: javascript html regex freemarker


【解决方案1】:

我不确定您需要过滤掉哪些字符或字符序列,但根据您已有的,可能是这样的:

${s?replace('&[a-zA-Z]+;', '', 'r')?replace('[^a-zA-Z0-9. ]', '', 'r')}

所以这首先会删除像&amp;amp; 这样的东西,然后只保留“安全”字符。

但是,至少在原则上这是不完整的,因为 HTML 可以包含 &amp;#65; 之类的东西,这只是意味着 A,所以它不应该被删除,而是替换为 A... 或者,它可能包含&lt;b&gt;foo&lt;/b&gt; 之类的标签,然后应将其转换为foo,而不是bfoob。不确定您是否需要处理这些事情,但如果需要,则需要将字符串转换为纯文本,这不是一件小事,而且 FreeMarker 没有内置的。

【讨论】:

  • 谢谢,但显然我无法在打印输出上替换,而只能在变量中替换...我得到一些 freemarker 错误
  • 抱歉忽略我之前对你的代码的评论我仍然得到 &amp i 像这样的轻微 mod 并且看起来它满足我的需要:?replace("&amp;,|[^a-zA-Z0-9.]", " ", 'r')&gt;
  • @crasion 啊,我忘记了 + 之前的 ;... 查看更新的答案。 (我认为您评论中的 &amp;,| 无效。)
猜你喜欢
  • 2012-11-24
  • 2013-07-06
  • 1970-01-01
  • 2020-11-04
  • 2011-09-18
  • 1970-01-01
  • 2015-04-12
  • 2020-01-31
  • 2016-11-09
相关资源
最近更新 更多