Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: erikoismerkkien muuttaminen

Sivun loppuun

musti [31.10.2011 08:08:50]

#

Käytössä Delphi 6, pitäisi korvata merkkijonossa erikoismerkit niin että kun jono laitetaan selaimen osoiteriville niin se toimii

Mutta miten saan tutkittua tuolla esimerkillä muutamia merkkejä kuten heittomerkki tai lainausmerkki

tämä pieni esimerkki ei tunnu toimivan, mikäs minulla menee väärin, haluan korvata heittomerkin jonolla %92

for merkki := 1 to length(merkkijono) do
begin
  if instr[merkki] = '\'' then
  begin
    jono:=jono+ '%92';
  end
end;

Mod. lisäsi kooditagit!

jtha [31.10.2011 09:27:41]

#

En ole Delphiä käyttänyt, mutta missä vaiheessa siirrät muut merkit 'jono' muuttujaan?
Näyttäisi siltä että muuttuja 'jono' saa vain '%92' niin monesti kuin on '\'-merkkejä muuttujassa 'merkkijono'

musti [31.10.2011 10:56:55]

#

Ongelman oli että tuota %92 ei tullut kertaakaan.

muut merkit katsottiin vastaavasti if lausekkeilla ja loput merkit kopioitiin suoraan jonoon.

Metabolix [31.10.2011 12:22:20]

#

Onko '\'' todella kelvollinen teksti? Heittomerkki on '''' tai #39, ja luultavasti sinun olisi viisainta korvatakin se jonolla '%27'.

Yucca [31.10.2011 12:57:43]

#

Tässä on ilmeisesti taustalla jokin heittomerkkejä koskeva sekaannus. Ascii-heittomerkin (') %-koodattu muoto on tosiaankin %27. Sen sijaan %92 ei tarkoita mitään, ellei oleteta URLin merkistökoodauksen olevan esimerkiksi windows-1252, jolloin se tarkoittaisi käänteistä kaarevaa heittomerkkiä (‘). Mutta URLien merkistökoodaukseksi suositellaan nykyisin UTF-8:aa, ja silloin %92 olisi mahdoton (kielletty).

Yleisesti ottaen on paljon turvallisempaa toimia niin, että käsitellään joukko merkkejä, jotka ovat sellaisinaan sallittuja tai käsiteltävissä järkevästi (esim. muunnettavissa), ja tehdään jokin poikkeuskäsittely, joka kattaa kaikki muut. Siis ei niin, että yritetään käsitellä jotkin erikoistapaukset, jotka tulevat mieleen, vaan järjestelmällisesti tarkistetaan, onko kirjain, olisiko numero, onko sallittu muu merkki, onko koodattavissa oleva merkki - ja jos ei ole, niin tehdään tilanteeseen sopiva virheenkäsittely.

Jos halutaan tehdä merkkijonosta sellainen, jonka voi liimata selaimen osoiteriville, se pitäisi koodata STD 66:n (RFC 3986) mukaisesti.

musti [31.10.2011 13:01:55]

#

siispä mulla oli sekaannnus

etsin hetken internetin ihmeellisestä sisällöstä ja löysin pienen koodin

function urlencode(source:string):string;
 var i:integer;
 begin
   result := '';
   for i := 1 to length(source) do
       if not (source[i] in ['A'..'Z','a'..'z','0','1'..'9','-','_','~','.']) then result := result + '%'+inttohex(ord(source[i]),2) else result := result + source[i];
 end;

kokeilen parhaillaan tätä jos se toimisi paremmin

Mod. lisäsi kooditagit! Ole hyvä ja lue keskustelun ohjeet.

musti [31.10.2011 14:05:22]

#

Jippii tämä koodi toimi niinkuin pitikin

Yucca [31.10.2011 15:14:37]

#

musti kirjoitti:

Jippii tämä koodi toimi niinkuin pitikin

Hyvä jos toimii – mutta se toimii lähinnä maailmassa, jossa merkkijono ei voi sisältää muita merkkejä kuin Ascii-merkkejä.

Tuossahan on turvallinen lähtökohta, koska se koodaa kaikki muut merkit kuin ne, jotka spesifikaatioissa määritellään turvallisiksi. Käytetty koodaustapakin on oikea Ascii-merkeille. Nyt täytyy sitten vain toivoa, että merkkijonossa ei koskaan voi olla esimerkiksi ääkkösiä tai luonnollisten kielten lainausmerkkejä (’, ’, ö jne.).

User137 [31.10.2011 15:33:55]

#

Eikös se nyt toimis vaikka merkkais kaikki merkit prosenttikoodauksella, kirjaimet a..z ja numerot mukaanlukien? Joten luulisin että yllämainittu koodi toimis kaikissa tapauksissa. Nuo if:n erikoistapaukset vain lyhentävät merkkijonoa yleisillä/standardin mukaisilla merkeillä.

Grez [31.10.2011 15:58:01]

#

Niin, Yucca varmaan haki sitä, että tuolla koodilla ä ei muutu muotoon %C3%A4 , kuten tapahtuu jos kirjoitat sen selaimen osoiteriville tyyliin:

google.com/?q=ä


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta