具有特殊字符的 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é 

如果浏览器显示下面损坏的字符串,那么这是一个文件编码问题,而不是 cfinvokecffunction

的问题
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>

另见 <cfprocessingdirective> and how not to use it