为什么ColdFusion会改变查询结果中的值?

时间:2012-12-21 15:49:41

标签: string select coldfusion cfquery

这是一个我从未注意过的奇怪的事情。

我在ColdFusion 8中针对iSeries / DB2数据库运行SELECT查询。

以下是最简单的查询:

<cfquery name="qMyData" datasource="#APPLICATION.DataSource#">
    SELECT  'XXX  111'
    FROM    MYLIB.MYTABLE
</cfquery>

选择的值是XXX 111(两个字符串之间有两个空格)。查询返回的值为XXX 111(它删除了第二个空格):

<cfdump var="#qMyData#" /> 

返回以下查询结果:

<TABLE class=cfdump_query>
<TBODY>
<TR>
<TH style="CURSOR: hand" class=query title="click to collapse" onclick=cfdump_toggleTable(this); colSpan=5>query</TH></TR>
<TR bgColor=#eeaaaa>
<TD style="CURSOR: hand" class=query title="click to collapse" onclick=cfdump_toggleRow_qry(this);>&nbsp;</TD>
<TD class=query>00001</TD>
<TR>
<TD style="CURSOR: hand" class=query title="click to collapse" onclick=cfdump_toggleRow_qry(this);>1</TD>
<TD vAlign=top>XXX 111 </TD>

为什么ColdFusion会删除第二个空格?是否有一种解决方法可以确保我获得正在尝试检索的EXACT值?

3 个答案:

答案 0 :(得分:7)

ColdFusion不是删除空格,而是删除浏览器,或者更直接地删除HTML。

如果输出像@Tomalak所说的值,或类似的东西:

<cfoutput query="qMyData">
#replace(qMyData.myColumn," ","&nbsp;","all")#
</cfoutput>

你会看到空白就在那里。

检查出来:http://www-sul.stanford.edu/tools/tutorials/html2.0/whitespace.html

您应该用不间断的空格替换空格以避免崩溃。

答案 1 :(得分:2)

我认为给出的答案不太理想。

首先,正如其他人所说,白色空格字符序列的崩溃是HTML specification的一部分。

如果您想保留空白,则不应将所有空格更改为&amp; nbsp;实体 - 这不是该实体的用途。这是一个不会破坏的空间。这不是为了保留嵌入的空白区域。

@DanBracuk为您提供最正确的语法答案:如果您想在浏览器中呈现文本时保留这些空间,则应使用&lt; pre /&gt;。这就是它的用途,它是这项工作的正确工具。

答案 2 :(得分:1)

我同意Blaise的说法是浏览器删除了html输出中的额外空格 您应该使用format属性来获得预期结果:

<cfdump var="#qMyData#" format="text" />