Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 09:23 Der er 29 kommentarer og
1 løsning

Undgå plus og anden konvertering af mærkelige tegn

Hej!

Hvordan undgår jeg den konvertering som sker når javascript har fat i ens tekster, f.eks. Ø bliver anderledes og og mellemrum bliver til +!

%F8 = Ø
Avatar billede roenving Novice
09. februar 2006 - 12:09 #1
Det sker kun hvis du beder om det eller f.eks. bruger tegnene i en url, hvor en hel del tegn er eller har været ulovlige, hvorfor browsere finder på at lave dem om !-)
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 12:14 #2
okay, jeg sender noget mellem 2 sider i en querystring, hvordan får jeg det omkonverteret, så det er rigtige tegn og ikke + og %F8
Avatar billede roenving Novice
09. februar 2006 - 12:32 #3
Hvis du skal bruge det via javascript, skal du unescape get-værdierne !-)
Avatar billede roenving Novice
09. februar 2006 - 12:32 #4
Hvordan indsætter du det ?-)

-- prøv at vise funktionen !o]
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 12:33 #5
kan jeg konverterer mig ud af problemet eller hvad skal jeg gører!

Jeg ønsker at flytte data fra en form til en anden side uden brug af asp eller php!

derfor spurgte jeg igår efter en mekanisme, og fik en som ligger alle tingene i querystring, nu vil jeg så gerne undgå + som spaces og %F8 for Ø osv.
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 12:34 #6
var queryValues,queryNames,queryItems,querystring,url,hasQuerystring,temp,itemCount;
itemCount=0;

function initRequest(){
    url=document.location.href;
    window.print();
    start=url.indexOf("?");
    if (start==-1){hasQuerystring=false;}
    else{
        hasQuerystring=true;
        queryValues=new Array();
        queryNames=new Array();
        querystring=url.substring(start+1,url.length);
        queryItems=querystring.split("&");
        for (i=0;i<queryItems.length;i++){
            temp=queryItems[itemCount].split("=");
            queryNames[itemCount]=temp[0].toLowerCase();
            queryValues[itemCount]=temp[1];
            itemCount++;   
        }
    }
}

function request(item){
    if (hasQuerystring){
        item=item.toLowerCase();
        for (j=0;j<itemCount;j++){
            if (item==queryNames[j])
                return queryValues[j];
        }
        return '';
    }
    else
        return '';
}
initRequest();
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 12:35 #7
<script type="text/javascript">document.write(request('T2'))</script>
Avatar billede roenving Novice
09. februar 2006 - 12:45 #8
...

        for (i=0;i<queryItems.length;i++){
            temp=queryItems[itemCount].split("=");
            queryNames[itemCount] = unescape(temp[0].toLowerCase());
            queryValues[itemCount] = unescape(temp[1]);
            itemCount++;   
        }

...

-- men funktionerne kan laves meget mere brugbare, hvis du bruger et associativt array:

var queryValues = new Array(),q,hasQuerystring;

function initRequest(){
    //window.print(); //Hvad gør denne ?-)
    if (!location.search)
      hasQuerystring=false;
    else{
        hasQuerystring=true;
        q = location.search.split("&");
        for (i=0;i<q.length;i++){
            q[i] = q[i].split("=");
            queryValues[unescape(q[i][0])] = unescape(q[i][1]);
        }
    }
}

function request(item){
  return hasQuerystring && queryValues[item.toLowerCase()] ? queryValues[item.toLowerCase()] : "";
}

-- den kunne også gøres adskilligt kortere ..
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 12:48 #9
Jeg skal vist lige have en forklaring på hvad der sker her
Avatar billede roenving Novice
09. februar 2006 - 12:55 #10
location.search er den del af en url, der står efter ? ...

-- og så bruger jeg et associativt array, det vil sige et array, hvor der ikke bruges et index, men en nøgle, i andre programmeringssprog kan den slags være en hashtable !o]

Derfor spørger jeg simpelten på, om location.search overhovedet er noget, dernæst laver jeg et array af de enkelte nøgle/værdi-par (på formen foreløbigt som nøgle=værdi !-)

-- disse splittes så og lægges ind i det associative array som: queryValues["nøgle"] = "værdi", i denne proces benytter jeg så unescape for at konvertere evt. escapede værdier til almindelige tegn ...

-- i request returneres der værdien, hvis nøglen findes, ellers returneres igenting !-)
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:04 #11
hvordan benytter jeg det så til at skrive ud på min nye side!
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:07 #12
window.print!

printer ud på printeren
Avatar billede roenving Novice
09. februar 2006 - 13:14 #13
Det kan du sagtens gøre på nøjagtig samme måde, som du skriver 12:35:00 !-)
Avatar billede roenving Novice
09. februar 2006 - 13:15 #14
-- men jeg forstår ikke, at der skal udskrives samtidig med at du henter værdierne i querystring ?-)
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:20 #15
nu får jeg inden værdier over!

Jeg kan se at de ligger i querystringen, men den skriver dem ikke ud
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:20 #16
skal jeg bruge din for løkke også
Avatar billede roenving Novice
09. februar 2006 - 13:31 #17
Hvad er det du skal bruge det til, og hvornår ?-)

-- og hvilke værdier er det, du lægger i querystrengen ?o]
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:36 #18
jeg har en form på en side, hvor der står en masse data som brugeren indtaster, disse data skal vises pænt på en anden side, de skal overføres til denne siden uden noget ASP eller PHP (det ville være nemt :))

Det er jeg blevet rådet til at gører med Querystring ved ikke om det er det smarteste?

Data kan indeholde danske bogstaver og sådan?

Jeg skal bruge det hurtigts muligt ?:)
Avatar billede roenving Novice
09. februar 2006 - 13:53 #19
Er det fordi, du vil skal lave et print af data ?-)

-- for så ville jeg nok åbne en popup, hvor data kunne skrives direkte fra det åbne dokument !-)

F.eks.

<script type="text/javascript">
var printWin;
function printData(f){
  if(!printWin)
    return;
  var elms = f.elements, pDoc = printWin.document,txt = "";
  for(i=0;elms.length>i;i++){
    switch(elms[i].type){
      case "text":
      case "textarea":
      case "select-one":
        txt += elms[i].name + ": " + elms[i].value + "<br>";
        break;
      case "select-multiple":
        txt += elms[i].name + ":<br>"
        for(j=0;elms[i].length>j;j++){
          txt += elms[i].options[j].selected ? elms[i].options[j].value + "<br>" : "";
        }
        break;
      case "checkbox":
      case "radio":
        txt += elms[i].checked ? elms[i].name + ": " + elms[i].options[j].value + "<br>" : "";
        break;
    }
  }
  pDoc.open();
  pDoc.write(txt);
  pDoc.close();
  printWin.focus();
  printWin.print();
}
</script>

-- og så skal vinduet åbnes og funktionen kaldes, f.eks. på et link eller onsubmit fra en form:

<form action=" ... " onsubmit="printWin=window.open('','printWin','width=400,height=300');printData(this);return false;">

-- absolut utestet !-)
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 13:55 #20
Okay, men det fungerede nu udemærket med den først kode, jeg viste! bortset fra + og %8F som skulle erstattes
Avatar billede roenving Novice
09. februar 2006 - 14:03 #21
En af grundene til, at jeg ville vælge denne tilgang, er netop, at der ikke kan opstå problemer med tingene så !-)

-- design-mæssigt er den anden tilgang klart at foretrække, da det vil være dumt at forsåge at designe alt for meget i ovenstående javascript, men tilgangsvinklen kan også bruges til at fylde ind i definerede elementer i det dokument, der åbnes !o]
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 14:06 #22
ja okay!

har du noget til at replace + og %8F, så får du point
Avatar billede roenving Novice
09. februar 2006 - 14:09 #23
-- det er jo unescap-tingen !-)
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 14:11 #24
ja okay, hvad så med +, til space
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 14:14 #25
jeg får kun fjerne de mærkelige tegn omkring æøøå
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 14:29 #26
jeg kan ikke få fjernet spaces, hvilken unescap ting gør det
Avatar billede testpilot_dk Nybegynder
09. februar 2006 - 15:23 #27
min tekst hvor der stadig er + som mellemrum kommer fra et textarea
Avatar billede testpilot_dk Nybegynder
20. marts 2006 - 18:22 #28
jeg har løst mit problem, send et svar roenving
Avatar billede roenving Novice
20. marts 2006 - 18:25 #29
Oki '-)
Avatar billede roenving Novice
20. marts 2006 - 23:45 #30
-- og tak for point ;~}
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