2

我有一个 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表格中有一行带有name“José”,但是 cfinvoke 不返回这一行。任何不包含特殊字符的名称都有效,但任何带有特殊字符的名称都不会返回任何行。

是什么导致特殊字符破坏了 SELECT,我能做些什么来修复它?

4

1 回答 1

3

尝试在 .cfm 脚本中输出文字字符串

José 

如果浏览器在下面显示损坏的字符串,则这是文件编码问题,而不是cfinvokeor的问题cffunction

José 

要解决它,请在脚本顶部将编码设置为 UTF-8:

 <cfprocessingdirective pageencoding="utf-8"> 

您还可以使用 jvm arg 为整个 jvm 全局更改它-Dfile.encoding=UTF-8

值得注意的是 cfprocessing 指令经常被误解。此处需要它的唯一原因是文字字符串José嵌入在 cfm 源中。如果该字符串最终将被替换为表单字段,那么您将不需要该指令。原始代码将毫无问题地工作。

<!--- works in modern versions of CF -->
<cfinvoke component="cfcs.people" method="getPerson">
   <cfinvokeargument name="name" value="#form.name#">
</cfinvoke>

另请参阅<cfprocessingdirective>以及如何不使用它

于 2021-09-27T16:45:14.337 回答