Avatar billede taager-kongen Nybegynder
11. juni 2003 - 11:33 Der er 24 kommentarer og
1 løsning

str_replace virker ikke som det skal

har denne kode:
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";
$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);
for($i=0; $i < sizeof($delt); $i++) {
$tekst = str_replace($delt[$i],$spilt[$i],$tekst);;
}
echo $tekst;


I $tjek ligger de tegn som skal replaces med med bogstaverne.... Men når jeg undskriver det, for jeg 80 gange (tror jeg) tegn som der skulle udskrives... Ved nogen hvorfor?
Avatar billede nicklasb Nybegynder
11. juni 2003 - 11:36 #1
det vil for det første nok ikke virke skide godt, når du slutter din $tekst = str_re..... med to ;'er.. Prøv at slette den ene først..

Og hvis det er noget kode-relateret du spørger efter (forstår ikke lige dit spørgsmål helt 100%) ville det nok hjælpe med resten af koden..
eller skal vi bare gætte os til at hvad der står i $tekst og $code2 ??
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 11:45 #2
i code2 er der noget ligne:
00,25,16,12,56 altså nogen tal koder ! er du med?
i tekst er der:
$tekst ="Hejza gode ven.. Hvordan gaar det med dig? har du scoret nogen hotte blondiner?? Hilsen Rasmaas Madsen. !";

forstår du?
Avatar billede fangel Nybegynder
11. juni 2003 - 11:45 #3
som jeg ser det overskriver du variablen "tekst" hver gang... skal du tilføje til variablen eller hva?

Morten
Avatar billede fangel Nybegynder
11. juni 2003 - 11:48 #4
mig og nicklasb har på et tidspunkt udført en test på hastigheden af spilt vs explode, og kommet frem til at explode() er hurtigst, og at det går hurtigst hvis man benyter ' til at omkrandse strengen...

altså $delt = explode(',', $bogstaver);

Morten
Avatar billede nicklasb Nybegynder
11. juni 2003 - 11:49 #5
den kommer med et output hvis du bare fjerner den ene ;..

altså noget ligende:

<?php
$tekst ="Hejza gode ven.. Hvordan gaar det med dig? har du scoret nogen hotte blondiner?? Hilsen Rasmaas Madsen. !";

$code2 =    "Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A,z,y,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,y,z,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";

$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);

for($i=0; $i < sizeof($delt); $i++) {
    $tekst = str_replace($delt[$i],$spilt[$i],$tekst);
}

echo $tekst;
?>

men koden vil dog aldrig indeholde andet end de første 14 tegn af alfabetet, da du når at skrive koden over, før den bliver skrevet ud...
Hvis du SKAL lave det på den måde vil det nok være en ide at finde nogle tegn som du IKKE bruger i teskten.. Så må du evt. gøre så brugeren ikke kan bruge en betemt antal tegn..

ellers skal du altså have lavet koden lidt om..!
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 11:50 #6
er ikke med...
den skal finde alle A og replace A med tegnet, som har samme spilt værdi med Aèt... er du med? så skal den kører alle bogstaverne/tal/tgen igennem.. er du med?
Avatar billede nicklasb Nybegynder
11. juni 2003 - 11:51 #7
og så så jeg selvfølgelig ikke mortens indlæg før jeg postede.. ;D
men rigtigt.. udskrift også evt "'erne rundt om din tekststreng med ''er.. det vil være lidt bedere.. men stadig.. koden skal laves om hvis den skal virke.. det er ikke 'erne der hjælper på det.. :D
Avatar billede nicklasb Nybegynder
11. juni 2003 - 11:54 #8
hehe.. og så så heller ikke din..

hvis du har denne streng.

"Abel spen dabel, hvad koster din sabel.
10 kroner på en god dag!"

og du starter med at udskifte alle 'a'-er med et 1 tal fx, bliver den nu til

"Abel spen d1bel, hv1d koster din s1bel.
10 kroner på en god d1g!"

nu udskrifter du så resten af rækken med tal, og kommer nu til 1'taller.. her udskrifter du 1'tallerne med z'er..

nu kommer der til at stå:

"Abel spen dzbel, hvzd koster din szbel.
z0 kroner på en god dzg!"

og når du så senere vil dekode den bliver den så til

"Abel spen dabel, hvad koster din sabel.
a0 kroner på en god dag!" // altså 1'tallet ikke er kommet med..

Det gør den med ALLE dine tegn, da den når at skrive ne nu $tekst inden hver nye replace. Derfor ville det nok hjælpe en god del at lave koden om..
Avatar billede nicklasb Nybegynder
11. juni 2003 - 11:56 #9
ellers skal du holder dig til KUN at bruge tal i den kodede form.. som du også selv skrev.. men så skal du sørge for at teksten heller ikke indeholder disse tal..
altså sørge for at der ingen tal er i den tekst de poster..
Avatar billede erikjacobsen Ekspert
11. juni 2003 - 11:56 #10
....
$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);
$tekst = str_replace($delt,$spilt,$tekst);
echo $tekst;
Avatar billede nicklasb Nybegynder
11. juni 2003 - 12:00 #11
du kan se hvad jeg mener med denne kode:

<?php
$tekst ="Hejza gode ven.. Hvordan gaar det med dig? har du scoret nogen hotte blondiner?? Hilsen Rasmaas Madsen. !";

$code2 =    "Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A,z,y,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,y,z,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";

$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);

for($i=0; $i < sizeof($delt); $i++) {
    $tekst = str_replace($delt[$i],$spilt[$i],$tekst);
}

echo $tekst . '<br><br>';

for($i=0; $i < sizeof($delt); $i++) {
    $tekst = str_replace($spilt[$i],$delt[$i],$tekst);
}

echo $tekst;
?>

den skulle jo gerne decryptere koden igen, så der stod det du havde i $tekst fra starten.. men det kan den jo ikke (læs forklaring oven over..)

men hvad er det dog du vil bruge det til?? ville det ikke være lettere at bruge en af phps krypteringsformer??
fx en base64 som så kan dekrypteres igen, hvis det altså er kryptering du prøver på..
base64 kan heller ikke læses med det blotte øje, men vil dog være let at dekrypetere hvis man har en computer og en form for programmeringssprog til rådighed.. (men det kan din også let.. ;)
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 12:04 #12
skal lige ind til byen :( ... men her ligger koden:
http://80.160.115.23/rasmus/krypt/mere2.php
Det er de sisdte tal, som skulle være det, men det virker ikke efter hensikten..,koden er :
<?php
function kode() {
$code = "";
$skriv = "";
global $skriv;
global $code2;
$klar = "ja";
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";
$delt = split("\,", $bogstaver);
settype($tjek, "array");
for($i=0; $i < sizeof($delt); $i++) {
$code = "(" .rand(10000,999);
if (array_search($code, $tjek) === false) $tjek[] = $code;
$klar = "nej";
}
If ($klar = "ja") {
$skriv = "";
for($i=0; $i < sizeof($tjek); $i++) {
$skriv .= $delt[$i] . " = " . $tjek[$i] . "</br>";
if ($i == "0") {
$code2 .= $tjek[$i];
}else{
$code2 .= "," .$tjek[$i];
}
}
} else {
echo "hov";
break;
kode();
}
}
kode();
echo $skriv ."<p>";
echo $code2 ."<p>";
$tekst ="Hejza gode ven.. Hvordan gaar det med dig? har du scoret nogen hotte blondiner?? Hilsen Rasmaas Madsen. !";
//krypter
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,(,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,1,2,3,4,5,6,7,8,9,0,/**/,;,:,.";
$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);
$tekst = str_replace($delt,$spilt,$tekst);
echo $tekst;
?>
Avatar billede erikjacobsen Ekspert
11. juni 2003 - 12:08 #13
If ($klar = "ja") {

skal nok være

If ($klar == "ja") {

og hvor sætter du den til "ja" igen?
Avatar billede nicklasb Nybegynder
11. juni 2003 - 12:19 #14
det virker da også som det skal (med erikjacobsens lille ændrig), hvis du bare lader være med at tjekke på tallene..
Prøv engang at tænke det igennem..
Hvis du først skrifter ca 30-40 tegn ud med 3 tal og en parantes-start for hvert tegn, og de derefter skrifter tallene ud med en parantes og tre tal igen, vil den jo blive mega lang, og HELT umlig at decryptere..

prøv at udskrifte $bogstaver med
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,/**/,;,:,.";

men sku ikke en videre køn eller elegant løsning.. jeg havde nok fundet mig en anden løsning hvis det var mig der skulle bruge en sådan funktion..
Avatar billede erikjacobsen Ekspert
11. juni 2003 - 12:24 #15
Tjah, jeg ville bare 

$a=strtr("abekattene","abcdef","xyzpqr");
print "$a\n";
$b=strtr($a,"xyzpqr","abcdef");
print "$b\n";

Det der vises her er nok unødvendigt kompliceret ;)
Avatar billede nicklasb Nybegynder
11. juni 2003 - 12:32 #16
ja.. det jeg mener :D

eller bruge en

http://dk.php.net/manual/en/function.base64-decode.php
http://dk.php.net/manual/en/function.base64-encode.php

der kan dog være problemer med mellemrum og æøå.. men det kan vel rettes..
Avatar billede erikjacobsen Ekspert
11. juni 2003 - 12:34 #17
Problemet med base64 er at det ikke er en kryptering. Der er ingen
"hemmelig nøgle". Rækkefølgen i tegnsubstitutionerne er en nøgle,
der kan brugs til kryptering og dekryptering.
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 15:58 #18
jeg skal ikke krypter... jeg vil bare gerne have dette til at virke...
Avatar billede nicklasb Nybegynder
11. juni 2003 - 16:07 #19
har du prøvet at fjerne tallene fra $bogstaver ??
eller skrevet lavet replacen som erikjacobsen skrev den 11/06-2003 11:56:48
så virker den (som den skal)!
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 16:30 #20
koden ser sådan ud:
<?php
function kode() {
$code = "";
$skriv = "";
global $skriv;
global $code2;
$klar = "ja";
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,/**/,;,:,.";
$delt = split("\,", $bogstaver);
settype($tjek, "array");
for($i=0; $i < sizeof($delt); $i++) {
$code = "(" .rand(10000,9999);
if (array_search($code, $tjek) === false) $tjek[] = $code;
$klar = "nej";
}
If ($klar == "ja") {
$skriv = "";
for($i=0; $i < sizeof($tjek); $i++) {
$skriv .= $delt[$i] . " = " . $tjek[$i] . "</br>";
if ($i == "0") {
$code2 .= $tjek[$i];
}else{
$code2 .= "," .$tjek[$i];
}
}
} else {
echo "hov";
kode();
}
}
kode();
echo $skriv ."<p>";
echo $code2 ."<p>";
$tekst ="Hejza gode ven.. Hvordan gaar det med dig? har du scoret nogen hotte blondiner?? Hilsen Rasmaas Madsen. !";
//krypter
$bogstaver = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,u,v,w,y,z,!,\",#,¤,%,&,/,),=,?,`,@,£,$,€,{,[,],},|,-,+,/,*,_,',^,~,>,<,§,½,/**/,;,:,.";
$delt = split("\,", $bogstaver);
$spilt = split(",", $code2);
$tekst = str_replace($delt,$spilt,$tekst);
echo $tekst;
?>

og kan ses her:
http://www.rasmus-madsen.dk/test/mere2.php

jeg for en mærkelig fejl nu ??
Avatar billede exp Juniormester
11. juni 2003 - 16:39 #21
Som jeg læser dette:

$code = "(" .rand(10000,9999);

så beder du den om tal mellem 10000 og 9999 - er det ikke at tælle den forkerte vej? Eller er der noget jeg har misforstået eller ikke er klar over?
Avatar billede taager-kongen Nybegynder
11. juni 2003 - 16:45 #22
det har ellers virket indtil nu !
Avatar billede exp Juniormester
11. juni 2003 - 16:48 #23
Warning: rand(): Invalid range: 10000..9999 in D:\web\rasmus-madsen.dk_b4r0mo\wwwroot\test\mere2.php on line 12
Avatar billede taager-kongen Nybegynder
14. juli 2003 - 16:42 #24
lukker.. fik aldrig en løsning..
Avatar billede erikjacobsen Ekspert
14. juli 2003 - 23:12 #25
Du fik en løsning - men ok, du ville ikke bruge den. Fair nok.
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