Escape-Apostroph beim Übergeben des Parameters im onclick-Ereignis

8

Ich gebe den Firmennamen an ein onclick-Ereignis weiter. Einige Firmennamen haben Apostrophe in ihnen. Ich habe '.Replace (' '', '' ')' zum Feld company_name hinzugefügt. Dadurch kann das Onclick-Ereignis ausgelöst werden, die Bestätigungsmeldung wird jedoch als "Jane & amp; Welding Company" angezeigt.

%Vor%

BEARBEITEN Die Bestätigungsmeldung zeigt die & amp; # 39; in der Nachricht und nicht in der '. Als ich es hier eingegeben habe, ersetzte es die & amp; # 39; mit einem '. Leerzeichen hinzugefügt, damit das nicht passieren würde. Ich möchte wissen, wie ich es am besten an mein onclick -Ereignis weiterleiten und es auch korrekt in der Nachricht anzeigen kann, ohne mehrere Ersetzungen vorzunehmen (wenn es einen besseren Weg gibt).

    
RememberME 17.05.2010, 00:14
quelle

3 Antworten

12

Es gibt zwei Möglichkeiten, wie ich es sehe.

  1. Wenn Sie die Parameter in Anführungszeichen (") statt in Apostrophe / einfache Anführungszeichen (') einschließen, sollten Sie sie nicht mehr entziffern. Die HTML-Kodierung kümmert sich um die Kodierung von Anführungszeichen (wenn sie in der Zeichenfolge enthalten sind) ) und das Apostroph wird kein Problem sein.Obwohl, da das Javascript bereits in Anführungszeichen eingeschlossen ist, müssen Sie Backslash aus Ihren Anführungszeichen fliehen, zB:

    onclick="return Actionclick(\"<%= Url.Action("Activate", new {id = item.company_id}) %>\", \"<%= Html.Encode(item.company1.company_name) %>\");"

  2. Backslash entkommt dem Firmennamen, da es nur die letzte Javascript-Zeichenfolge ist, die den Apostroph maskiert, nicht den HTML-Code. zB:

    onclick="return Actionclick('<%= Url.Action("Activate", new {id = item.company_id}) %>', '<%= Html.Encode(item.company1.company_name.Replace("'", "\'")) %>');"

Brenton Alker 17.05.2010, 00:25
quelle
2

Sie haben ein JavaScript-String-Literal innerhalb eines HTML-Attributwerts.

Sie müssten also zuerst den Wert JS-encodieren (indem Sie ' durch \' und \ durch \ ersetzen), dann HTML-encode. Derzeit sind Sie HTML-Codierung der ' (was wäre ineffektiv, da der Browser würde es wieder zu einem Apostroph entschlüsseln, bevor die JS-Engine es sah) ... und dann HTML-Codierung es wieder, so dass es wörtlich &#39; .

Verwenden Sie einen JSON-Encoder, um eine Zeichenfolge (oder einen anderen Werttyp) in ein JavaScript-Literal umzuwandeln.

Jedoch. JavaScript in einer Zeichenkette zu schreiben ist total nervig. Es ist nicht etwas, wozu der Verstand gut ist. Also tu es nicht. Vermeiden Sie jederzeit Inline-Event-Handler-Attribute. Verwenden Sie stattdessen static script und weisen Sie Handler aus JavaScript selbst zu, indem Sie unaufdringliches Scripting verwenden.

%Vor%

(Ich benutze jQuery, da Sie es in Ihren Tags haben:)

%Vor%

Beachten Sie jedoch, dass dies ein Missbrauch von <a> ist. Aktionen, die eine aktive Änderung an etwas vornehmen, sollten niemals als GET-Anfrage gesendet oder zugelassen werden. Sie sollten stattdessen eine Schaltfläche verwenden, die eine POST-Anfrage sendet (entweder direkt als Formular oder über AJAX). (Sie sollten auch die integrierten Steuerelemente von ASP.NET in Erwägung ziehen, anstatt die Werte in die Vorlage zu übernehmen, damit Sie HTMLEncode nicht so häufig aufrufen müssen.)

Sehen Sie diesen klassischen WTF für eine Möglichkeit, wie Sie das beißen kann.

    
bobince 17.05.2010 01:08
quelle
1

Ich bin gerade erst 5 Jahre später begegnet, also werde ich erzählen, was für mich funktioniert hat.

Sehen Sie sich HttpUtility.JavaScriptStringEncode auf MSDN

Sie können dies verwenden, um die Zeichenfolge auf der Serverseite zu codieren, wenn Sie den Wert der Eigenschaft festlegen. Dies erzeugt die Unicode-Darstellung des Apostrophs - "\ u0027", die an den JavaScript-Onclick übergeben werden kann.

Für das ursprüngliche Beispiel:

%Vor%

wird

%Vor%

Eine Anmerkung zu HttpUtility.JavaScriptStringEncode - Sie können einen Boolean angeben, um die Zeichenfolge mit doppelten Anführungszeichen zu codieren (bool addDoubleQuotes). Da diese Zeichenfolge jedoch als Parameter für eine JavaScript-Funktion verwendet wird, möchten Sie die zusätzlichen Anführungszeichen nicht verwenden.

    
Atalie 05.08.2015 22:23
quelle