在ColdFusion 9中将HTML格式的文本转换为常规文本

时间:2012-09-18 17:51:03

标签: mysql flex coldfusion coldfusion-9

应用程序包括Flex作为前端,ColdFusion 9作为中间层,MySQL 5作为后端。

MySQL表包含一些包含HTML格式的字段。因此,如果字段具有值字符串“Test Record”,则将其存储为 <TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT> 在MySQL表中

现在,此字段的值将作为

打印在PDF文档中
<cfdocument format="pdf" filename="#report_filename_format#" orientation="landscape"
overwrite="yes"
marginbottom="0" marginleft="0" marginright="0" margintop="0"
pagetype="legal">


<tr>
<td width="20%" style="background-color:##CCCCCC; font-weight:bold; text-transform:uppercase; vertical-align:top;">
Value
</td>
<td width="80%">#printrecord.field_value#</td>
</tr>

因为,字段值以HTML格式存储,所占用的空间更多而且没有 控制打印文本的字体类型和字体大小。

  1. ColdFusion 9中是否有任何函数可以将字段的值转换为常规文本(没有HTML格式),这样如果“测试记录”打印相同,无论它是否存储为字体大小10或者字体大小30?

  2. 我在考虑一种方法是在Flex应用程序中打印记录,使用TextArea控件的field.text属性(在Flex中) 转换为常规文本,然后将转换后的值传递给ColdFusion以在PDF文档中打印。还有其他更好的选择吗?

  3. 任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

实际上“解决方案”非常简单:

<cfscript>
  data   = '<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="##0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT>';
  regex  = "<(.|\n)*?>";
  result = reReplaceNoCase(data, regex, "", "all");

  writeOutput(result);
</cfscript>

我为我的示例添加了一个添加哈希标记,以避免语法错误。从你所说的,我认为无论如何这将由db查询获取。

另外(现在挑剔!)我建议用新值更新数据库,如果可以的话,摆脱内联样式,转而使用CSS; - )

答案 1 :(得分:1)

另一种方法是使用像jsoup这样的HTML解析器。

如果HTML不可预测或可能无效,则特别推荐这样做,因为它将以与浏览器相同的方式处理此问题(而正则表达式只是模式匹配;它实际上并不知道什么是/ isn不是标签。

<cfset data = '<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="##0B333C" LETTERSPACING="0" KERNING="0">Test Record<FONT SIZE="8"></FONT></FONT></P></TEXTFORMAT>' />

<cfset jsoup = createObject('java','org.jsoup.Jsoup') />

<cfset text = jsoup.parse(data).text() />

<cfdump var=#text# />

jsoup线可以执行一次并存储在例如应用范围。此外,您需要使用jsoup jar才能使其正常工作 - 对于CF9,您需要将其复制到{coldfusion} / lib目录中,然后重新启动服务器。