具有特殊字符的 cfinvokeargument 在 SELECT 中不起作用
cfinvokeargument with special character not working in SELECT
我有一个 cfinvoke:
<cfinvoke component="cfcs.people" method="getPerson">
<cfinvokeargument name="name" value="José">
</cfinvoke>
还有一个函数:
<cffunction name="getPerson" access="remote" returntype="any">
<cfargument name="name" type="string">
<cfquery name="qry" datasource="#datasource#">
SELECT id
FROM people
WHERE name = <cfqueryparam value="#name#" cfsqltype="CF_SQL_NVARCHAR">
</cfquery>
<cfreturn qry>
</cffunction>
我在 people
table 中有一行 name
是“José”,但是 cfinvoke 没有 return 这一行。任何不包含特殊字符的名称都有效,但任何具有特殊字符的名称 returns 没有行。
是什么导致特殊字符破坏 SELECT,我该如何解决?
尝试只输出 .cfm 脚本中的文字字符串
José
如果浏览器显示下面损坏的字符串,那么这是一个文件编码问题,而不是 cfinvoke
或 cffunction
的问题
José
要解决它,请在脚本顶部将编码设置为 UTF-8:
<cfprocessingdirective pageencoding="utf-8">
您也可以使用 jvm arg -Dfile.encoding=UTF-8
.
针对整个 jvm 全局更改它
值得注意的是 cfprocessingdirective 经常被误解。 only 此处需要它的原因是因为文字字符串 José
嵌入在 cfm 源中。如果该字符串最终将被替换为表单字段,那么您将不需要该指令。原始代码可以正常工作。
<!--- works in modern versions of CF -->
<cfinvoke component="cfcs.people" method="getPerson">
<cfinvokeargument name="name" value="#form.name#">
</cfinvoke>
我有一个 cfinvoke:
<cfinvoke component="cfcs.people" method="getPerson">
<cfinvokeargument name="name" value="José">
</cfinvoke>
还有一个函数:
<cffunction name="getPerson" access="remote" returntype="any">
<cfargument name="name" type="string">
<cfquery name="qry" datasource="#datasource#">
SELECT id
FROM people
WHERE name = <cfqueryparam value="#name#" cfsqltype="CF_SQL_NVARCHAR">
</cfquery>
<cfreturn qry>
</cffunction>
我在 people
table 中有一行 name
是“José”,但是 cfinvoke 没有 return 这一行。任何不包含特殊字符的名称都有效,但任何具有特殊字符的名称 returns 没有行。
是什么导致特殊字符破坏 SELECT,我该如何解决?
尝试只输出 .cfm 脚本中的文字字符串
José
如果浏览器显示下面损坏的字符串,那么这是一个文件编码问题,而不是 cfinvoke
或 cffunction
José
要解决它,请在脚本顶部将编码设置为 UTF-8:
<cfprocessingdirective pageencoding="utf-8">
您也可以使用 jvm arg -Dfile.encoding=UTF-8
.
值得注意的是 cfprocessingdirective 经常被误解。 only 此处需要它的原因是因为文字字符串 José
嵌入在 cfm 源中。如果该字符串最终将被替换为表单字段,那么您将不需要该指令。原始代码可以正常工作。
<!--- works in modern versions of CF -->
<cfinvoke component="cfcs.people" method="getPerson">
<cfinvokeargument name="name" value="#form.name#">
</cfinvoke>