echoSweMedlem sedan nov. 20041 189 inlägg Hej!
Snabb, förhoppningsvis enkel fråga:
Finns det en escapefunktion i C# i ASP .Net? Som tar bort #&%* samt alla andra otillåtna värden och gör om dem till hexadecimala? (SQL Injections tex.)
Det här är den funktionen som jag vill skriva i ASP .Net, skriven i JavaScript:
function repl(){
var elm = document.getElementById("body");
elm.value = elm.value.replace(/\\n/g, "\<br\>\\n");
String.prototype.htmlencode = function()
{
var e="";
for (var n=0; n \< this.length; n++)
{
e += (!this.substring(n,n+1).match(/\[a-zA-Z0-9\\n\<br\>\]/)) ? "&#" + this.charCodeAt(n) + ";":this.substring(n,n+1);
}
return e;
}
//...
elm.value=elm.value.htmlencode();
}
Funktionen gör först om alla nya-rad tecken (\n) till <br>. Sen matchar den hela strängen mot ett regelbunder uttryck som gör om alla tecken förutom a-zA-Z0-9\n<br> till hexadecimala tecken. Sen ändrar den vad som står i textboxen, och sedan skickas sidan tillbaka (IsPostBack = 1).
//Henke
PDahlenMedlem sedan apr. 2004778 inlägg Ta en titt på Regular Expressions
echoSweMedlem sedan nov. 20041 189 inlägg Jo, de känner jag till, men min fråga var om det finns en escape funktion.
PDahlenMedlem sedan apr. 2004778 inlägg Du efterfrågar något som byter ut och/eller tar bort delar av en sträng och det är exakt vad man använder Regular Expressions till.
Fundera även på exakt vad det är du ska göra.
Du nämner t.ex. SQL Injections. Dessa skyddar du dig mot genom att i själva databasanropet använda en parameteriserad sql-fråga.
1. Definiera problemet. Istället för att "översätta" den JS funktion du har, beskriv de saker du behöver göra.
2. Se vad det finns för lösningar i ASP.NET för detta.
Detta eftersom man oftast inte gör saker på samma sätt som i ASP.
Det var därför jag svarade med Regular Expressions.
echoSweMedlem sedan nov. 20041 189 inlägg Svar till Pdahlen
Okej...
Funktionen gör först om alla nya-rad tecken (\n) till <br>. Sen matchar den hela strängen mot ett regelbundet uttryck som gör om alla tecken förutom a-zA-Z0-9\n<br> till hexadecimala tecken. Sen ändrar den vad som står i textboxen, och sedan skickas sidan tillbaka (IsPostBack = 1).
Precis som jag skrev ovan. Det som den är till för är att jag vill kunna skicka mail som innehåller å,ä och ö. Detta och jag kollat ganska mycket på, och har kommit fram till att antingen så köper man en komponent till ASP .Net som klarar av det, eller så programmerar man en komponent själv. Det är bara det att jag inte vet hur jag ska ta tillvara dessa non-ascii tecken. Alltså kan jag inte skriva min egen komponent.
Javascriptet gör detta, genom att översätta alla tecken som inte ingår i regular expression (match()) till hexadecimala värden som kan visas i en webbläsare/HTML tolk.
Det jag först funderade på var om man kan loopa igenom varje tecken i <textarea> och kontrollera om det är å,ä eller ö. Det är det javascriptet gör, fast det kollar alla tecken förutom.
Så för att översätta den funktionen så behövs något sätt att transportera alla non-aschii tecken till mottagarens e-mail program. Jag vet att codebase 64 samt ett annat character-encoding klarar det, men när man sätter mail.BodyEncoding = System.Text.Encoding.GetEncoding
till det så kan man fortfarande inte skicka non-aschii tecken.
Hur tycker du man ska göra?
PDahlenMedlem sedan apr. 2004778 inlägg När det gäller själva utbytet av tecken så fixar ett RegEx detta.
Men om vi övergår till själva mailandet. Har du något exempel på mailapplikation eller webbläsare där du får problem?
Anledningen att jag frågar är att jag aldrig haft några problem att skicka mail i ASP.NET med å, ä och ö så om du har något specifikt program där du får problemen så kan jag testa.
echoSweMedlem sedan nov. 20041 189 inlägg Jo, jag har ett program för det. Den skickar helt enkelt helt utan att ta med åäö. Koden är här, men det är ingen speciell webbläsare det handlar om:
using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.Mail;
using System.Web.UI.WebControls;
public class Mailer:Page
{protected void SendBtn_Click (object sender,EventArgs E)
{
string strMeddelande;
if (Page.IsValid)
{
messageLbl.Text = "";
MailMessage mail = new MailMessage();
mail.From = "\"" + Request.Form["senderName"] + "\" <" + Request.Form["senderEmail"] + ">";
switch (Request.Form["recieverDropDown"]) {
...
}
mail.Subject = Request.Form["subject"];
mail.Body = "Namn: " + senderName.Text + "<br />"
+ "Klass: " + senderClass.Text + "<br /><br />Meddelande:<hr />"
+ body.Text + "<br /><hr />";
mail.BodyFormat = MailFormat.Html;
mail.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
//adding attachments
...
//Setting server and sending
SmtpMail.SmtpServer = "...";
SmtpMail.Send(mail);
//Resetting form
senderName.Text = "";
senderEmail.Text = "";
senderClass.Text = "";
subject.Text = "";
body.Text = "";
messageLbl.Text = messageLbl.Text + "\<br /\>Du skrev in allt som behövdes och skickade till " + Request.Form\["recieverDropDown"\] + ".";
}
else { strMeddelande = "The page did not pass validation. Check input"; }
}
}
PDahlenMedlem sedan apr. 2004778 inlägg Frågan är om du kanske gör "för mycket". Att problemet består i att du gör både en textencoding men att du skickar HTML-mail. Kanske krockar, vet inte riktigt. Annars kanske det är själva mailservern det hänger på.
Jag skickar i alla fall mail med följande.
När man sätter SmtpServer="" används den mailserver som ligger lokalt på webbservern.
Dim objMM As New MailMessage
objMM.To = "info@blabla.se"
objMM.From = "hej@blabla.se"
objMM.BodyFormat = MailFormat.HTML
objMM.Priority = MailPriority.Normal
objMM.Subject = "Ett ärende"
objMM.Body = "meddelandet"
SmtpMail.SmtpServer = ""
SmtpMail.Send(objMM)
Jag har aldrig haft några problem med å, ä och ö.
echoSweMedlem sedan nov. 20041 189 inlägg Okej. Jag testade precis att ta bort bodyEncoding och skicka igen, men det hjälpte inte. Servern tar fortfarande bort åäö.
Jag vill byta till ASP .Net eftersom det blir snyggare, men det är ju inget måste. Jag skulle också vilja ersätta tecknen med html motsvarigheten istället för den hexadecimala motsvarigheten, så du kanske hade kunnat berätta lite om hur RegEx fungerar, eller ge mig en länk?
MVH Henrik