在 ColdFusion 中提交具有特殊字符的表单

Submitting a form in ColdFusion that has special characters

我有一个表单,其中包含带有用户输入数据的文本框和文本区域。我正在使用带有 cfquery 标记的简单 ColdFusion 操作页面将数据提交到我的数据库。

<cfquery name="add_ticket" datasource="#datasource#">
INSERT INTO service_ticket(end_user, customer_id, ticket_id, company_name, service_description, service_date, status, customer_signature, technician_signature, materials, ticket_type, equipment, discount, percent_discount, material_subtotal, material_tax, material_shipping, material_total, billable_service_total, tax_rate, grand_total, equipment_id, equipment_name)
VALUES("", '#get_customer.customer_id#', "#ticketnum#", "#url.customer_name#", "#url.description# - #get_equipment.equipment_name#", #CreateODBCDateTime(Now())#, "In-progress", "0", "0", "0", "#url.TT#", "0",  '0.00', '0', '0.00', '6.625', '0.00', '0.00', '0.00', '#subscriber.tax_rate#', '0.00', "#get_equipment.id#", "#get_equipment.equipment_name#")    
</cfquery>

我偶尔会 运行 提交此查询时出错,因为某些列的值包含特殊字符。

例如,company_name 的值可能是:Smith & Johnson, LLC。

ColdFusion 代码一旦遇到 & 符号就会中断。我试过用单引号和双引号以及

将值括起来
<cfqueryparam value="#url.company_name#" cfsqltype="cf_sql_longvarchar" />

但似乎无济于事。

有没有更好的方法来处理这种情况?

我目前正在运行安装 Lucee 服务器。

你有选择。

您可以将表单更改为如下形式:

<form action = actionpages/add_ticket_maintenance.cfm
target = "_blank"
method = "post">

这会将表单提交到单独的 window 或选项卡。在您的操作页面上,您必须使用 form 范围而不是 url 范围。

或者,您可以使用 EncodeForUrl 函数对 url 变量进行编码。您的选择。

阅读您的评论后,我现在明白问题出在哪里了。您的问题的解决方案是在使用 javascript.

调用操作页面时使用 ColdFusion 函数 encodeForURL()

更改您的代码
window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#customer_name#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");

window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#encodeForURL(customer_name)#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");