当'撇号'在输入中输入

本文关键字:输入 撇号 | 更新日期: 2023-09-27 17:53:51

我试图修改现有的代码(由我的前任编写),该代码将撇号(与测试一起输入文本框)更改为"Å"符号,同时将其显示回文本框中。我怎样才能改变这一点?当我试图从代码中删除符号时,我无法获得结果返回/看到文本框中保存的文本,并且它给出了错误消息。

这里是网格视图控件的代码,在其中显示结果,这是我应该点击的地方,看看输入什么数据:

protected void grdActivities_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        DataRowView dr = e.Row.DataItem as DataRowView;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label lblPerson = (Label)e.Row.FindControl("lblPerson");
            if (dr["Name"] != DBNull.Value)
                lblPerson.Text = dr["Name"].ToString();
            Label lblDate = (Label)e.Row.FindControl("lblDate");
            if (dr["service_outcome_date"] != DBNull.Value)
                lblDate.Text = dr["service_outcome_date"].ToString();
            Label lblReasonforContact = (Label)e.Row.FindControl("lblReasonforContact");
            if (lblReasonforContact != null)
            {
                if (dr["reason_for_contact_desc"] != DBNull.Value)
                {
                    lblReasonforContact.Text = dr["reason_for_contact_desc"].ToString();
                }
                if (dr["service_desc"] != DBNull.Value)
                {
                    lblReasonforContact.Text = dr["service_desc"].ToString();
                }
                if (dr["health_screening_recommendations_desc"] != DBNull.Value)
                {
                    lblReasonforContact.Text = dr["health_screening_recommendations_desc"].ToString();
                }
            }

            Label lblServiceDeliveryTime = (Label)e.Row.FindControl("lblServiceDeliveryTime");
            if (dr["service_delivery_time"] != DBNull.Value)
                lblServiceDeliveryTime.Text = dr["service_delivery_time_desc"].ToString();
            Label lblcreatedby = (Label)e.Row.FindControl("lblcreatedby");
            if (dr["createdby"] != DBNull.Value)
                lblcreatedby.Text = dr["createdby"].ToString();
            Label lblServiceType = (Label)e.Row.FindControl("lblServiceType");
            if (lblServiceType != null)
            {
                if (dr["contact_desc"] != DBNull.Value)
                    lblServiceType.Text = dr["contact_desc"].ToString();
            }

            string strScriptParam = "";
            string service_id="", psn = "", contact = "", reason = "", outcome = "", servicetraveltime = "", settingtype = "", strOtherTypeOfSetting = "";
            string dtmonth = "", dtday = "", dtyear = "", createby = "", note = "";
            string dtservicemonth = "", dtserviceday = "", dtserviceyear = "", dtfollowupbymonth = "", dtfollowupbyday = "", dtfollowupbyyear = "", service = "", HealthScreening = "", service_completed = "";
            if (dr["service_outcome_id"] != DBNull.Value)
                service_id = dr["service_outcome_id"].ToString();
            if (dr["PSN"] != DBNull.Value)
                psn = dr["PSN"].ToString();
            if (dr["dtDay"] != DBNull.Value)
                dtday = dr["dtDay"].ToString();
            if (dr["dtMonth"] != DBNull.Value)
                dtmonth = dr["dtMonth"].ToString();
            if (dr["dtYear"] != DBNull.Value)
                dtyear = dr["dtYear"].ToString();
            if (dr["mode_of_contact"] != DBNull.Value)
                settingtype = dr["mode_of_contact"].ToString();
            if (dr["other_mode_of_contact"] != DBNull.Value)
                strOtherTypeOfSetting = dr["other_mode_of_contact"].ToString();
            if (dr["contact"] != DBNull.Value)
                contact = dr["contact"].ToString();
            if (dr["reason_for_contact"] != DBNull.Value)
                reason = dr["reason_for_contact"].ToString();
            if (dr["outcome"] != DBNull.Value)
                outcome = dr["outcome"].ToString().Replace("'", "''");
            if (dr["service_delivery_time"] != DBNull.Value)
                servicetraveltime = dr["service_delivery_time"].ToString();
            if (dr["comment"] != DBNull.Value)
                note = dr["comment"].ToString();
            if (dr["health_screening_recommendations"] != DBNull.Value)
                HealthScreening = dr["health_screening_recommendations"].ToString();
            if (dr["service_completed"] != DBNull.Value)
            {
                service_completed = (string)dr["service_completed"].ToString();
            }
            if (dr["service_complete_date"] != DBNull.Value)
            {
                DateTime dtServicedate = (DateTime) dr["service_complete_date"];
                dtservicemonth = dtServicedate.Month.ToString();
                dtserviceday = dtServicedate.Day.ToString();
                dtserviceyear = dtServicedate.Year.ToString();
            }
            if (dr["followup_by_date"] != DBNull.Value)
            {
                DateTime dtfollowupdate = (DateTime)dr["followup_by_date"];
                dtfollowupbymonth = dtfollowupdate.Month.ToString();
                dtfollowupbyday = dtfollowupdate.Day.ToString();
                dtfollowupbyyear = dtfollowupdate.Year.ToString();
            }
            if (dr["service"] != DBNull.Value)
            {
                service = dr["service"].ToString();
            }
            strScriptParam = "'" + service_id + 
                             "','" + psn + 
                             "','" + dtmonth + 
                             "','" + dtday + 
                             "','" + dtyear + 
                             "','" + settingtype + 
                             "','" + contact + 
                             "','" + reason + 
                             "','" + servicetraveltime + 
                             "','" + outcome.Replace("'", "Å").Replace(Environment.NewLine, "''n")+ 
                             "','" + note.Replace("'", "Å").Replace(Environment.NewLine, "''n") + 
                             "','" + strOtherTypeOfSetting.Replace("'", "Å").Replace(Environment.NewLine, "''n") +
                             "','" + HealthScreening +
                             "','" + service_completed +
                             "','" + dtservicemonth +
                             "','" + dtserviceday +
                             "','" + dtserviceyear +
                             "','" + dtfollowupbymonth +
                             "','" + dtfollowupbyday +
                             "','" + dtfollowupbyyear + 
                             "', '" + service + "'";                          
            e.Row.Attributes.Add("style", "cursor:hand");
            e.Row.Attributes.Add("onclick", "javascript:return ShowGridRow(" + strScriptParam + ");");

            ImageButton lnkDel = (ImageButton)e.Row.FindControl("lnkDel");
            if (lnkDel != null)
                lnkDel.Attributes.Add("onclick", "javascript:ShowGridRow(" + strScriptParam + "); DeleteService('" + dr["service_outcome_id"].ToString() + "');");
        }
    }

这是我得到的错误信息:

消息:期望')'

和代码,我认为,需要改变!

 "','" + outcome.Replace("'", "Å").Replace(Environment.NewLine, "''n")+ 
                             "','" + note.Replace("'", "Å").Replace(Environment.NewLine, "''n") + 
                             "','" + strOtherTypeOfSetting.Replace("'", "Å").Replace(Environment.NewLine, "''n") +

当'撇号'在输入中输入

我不知道这是否是"真正的"问题,但我想以后节省一些悲伤:

using System.Linq;
// for each param, encode it as 'xyz', where xyz is properly escaped
// e.g. if the source was foo'bar then xyz is foo'x27bar for a final
// result of 'foo'x27bar' in the output. This is a valid JS literal
// which evaluates to the string foo'bar
var params = (new string[] { service_id, psn, dtmonth, ..., service })
   .Select(p => "'" + JsEncoder.EncodeString(p) + "'");
// Then join all the 'xyz' with commas so result is 'a','b',...'c'
var strScriptParam = string.join(",", params.ToArray());
// note no "javascript:" protocol for onclick
e.Row.Attributes.Add("onclick", "return ShowGridRow(" + strScriptParam + ");");

至少这将生成有效的Javascript文字,并保留Javascript中的'

其中JsEncoder如下(c# 3):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace foobar
{
        public class JsEncoder
        {
            static Regex EncodeLiteralRegex;
            // Format a bunch of literals.
            public static string Format (string format, params object[] items)
            {
                return string.Format(format,
                    items.Select(item => EncodeString("" + item)).ToArray());
            }
            // Given a string, return a string suitable for safe
            // use within a Javascript literal inside a <script> block.
            // This approach errs on the side of "ugly" escaping.
            public static string EncodeString (string value)
            {
                if (EncodeLiteralRegex == null) {
                    // initial accept "space to ~" in ASCII then reject quotes 
                    // and some XML chars (this avoids `</script>`, `<![CDATA[..]]>>`, and XML vs HTML issues)
                    // "/" is not allowed because it requires an escape in JSON
                    var accepted = Enumerable.Range(32, 127 - 32)
                        .Except(new int[] { '"', '''', '''', '&', '<', '>', '/' });
                    // pattern matches everything but accepted
                    EncodeLiteralRegex = new Regex("[^" +
                        string.Join("", accepted.Select(c => @"'x" + c.ToString("x2")).ToArray())
                        + "]");
                }
                return EncodeLiteralRegex.Replace(value ?? "", (match) =>
                {
                    var ch = (int)match.Value[0]; // only matches a character at a time
                    return ch <= 127
                        ? @"'x" + ch.ToString("x2") // not JSON
                        : @"'u" + ch.ToString("x4");
                });
            }
        }
}

快乐编码。