Avatar billede runekeldsen Nybegynder
15. november 2006 - 20:14 Der er 8 kommentarer

Problem med special tegn i html side

Kære eksperter,

Jeg har store problemer med special tegn som bliver leveret fra en data base ud til nogle html sider som templates.

Følgende tegn giver problemer enten i Javascript eller i html'en:
? ' < % > " & | = / \ + !

Er der en javascript funkton jeg kan anvende til at få fjernet ecapet disse tegn så de ikke giver problemer, men alligevel bliver vist korretk i browseren?

Jeg har været igang med at lave replace af hvert tegn til eksempelvis &lt; og &gt;, men jeg tænkte at der måtte være en ekspert som enten havde en funktion på lager eller havde en bedre løsning?
Avatar billede zynzz Praktikant
15. november 2006 - 20:30 #1
Jeg har set du har skrevet i JavaScript kategorien, men dette problem kan løses med php:

fx.:
echo htmlentities($teksten);

http://dk2.php.net/manual/da/function.htmlentities.php
Avatar billede runekeldsen Nybegynder
15. november 2006 - 20:38 #2
Jeg er desværre begrænset til javascript :-(
Har man noget ligende i javascript?
Avatar billede jhe-ting Nybegynder
15. november 2006 - 23:49 #3
Prøv at vise hvordan din template html bliver leveret.
Avatar billede roenving Novice
16. november 2006 - 03:19 #4
Måske kan du bruge:

<script type="text/javascript">
var x = "? ' < % > \" & | = / \ + !";
//bemærk at gåseøjne er tekst-escapet, det læses kun som gåseøjnene, se også resultatet !-)
alert( escape(x) );
alert( unescape( escape(x) ) );
</script>
Avatar billede runekeldsen Nybegynder
16. november 2006 - 08:23 #5
Hej Roenvinq jeg får fejl når jeg prøver at køre din kode?

Et af mine store problemer nu er at hvis jeg eksempelvis har en backslash \ som sidste tegn i strengen så escaper den " hvilket vil give fejl da strengen så aldrig bliver afsluttet.

Jeg anvender nu nedenstående funktion og har nu kun problemer med backslash som afslutter min streng inden jeg kommer til funktionen :-(

function htmlentities(str,typ) {
    if(typeof str=="undefined") str="";
    if(typeof typ!="number") typ=2;
    typ=Math.max(0,Math.min(3,parseInt(typ)));
    var html=new Array();
    html[38]="&amp;"; html[60]="&lt;"; html[62]="&gt;";
    if(typ==1 || typ==3) html[39]="&#039;";
    if(typ==2 || typ==3) html[34]="&quot;";
    for(var i in html) eval("str=str.replace(/"+String.fromCharCode(i)+"/g,\""+html[i]+"\");");
    var entity=new Array(
      "&nbsp;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;",
      "&uml;","&copy;","&ordf;","&laquo;","&not;","&shy;","&reg;","&macr;",
      "&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;",
      "&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;",
      "&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;",
      "&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;",
      "&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;",
      "&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;",
      "&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;",
      "&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;",
      "&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;",
      "&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&yacute;","&thorn;","&yuml;"
      );
    for(var i in entity) eval("str=str.replace(/"+String.fromCharCode(i*1+160)+"/g,\""+entity[i]+"\");");
    return str;
}
Avatar billede roenving Novice
16. november 2006 - 13:53 #6
Hvordan får du fejl ?-)

Den skal jo også escapes:

... )+"/g,\""+entity[i]+"\\");");

-- men alt andet lige er eval ikke en god måde at gøre det, brug hellere et regExp-objekt:

    var exp = null;
    for(var i in html){
      exp = new RegExp(String.fromCharCode(i),"g");
      str = str.replace(exp,html[i]);
    }
Avatar billede runekeldsen Nybegynder
17. november 2006 - 08:10 #7
Problemet er at jeg får min tekst streng fra en database så jeg har ikke mulighed for at bruge backslash som escape da jeg jo ikke ved hvilke tegn min streng vil indeholde.

Jeg vil prøvve med regExp istedet er den hurtigere?
Avatar billede roenving Novice
17. november 2006 - 12:45 #8
Selv om et regexp-objekt jo skal initialiseres bør den alt andet lige være hurtigere end eval-metoden, som jo skal kunne alt muligt !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester