Avatar billede pissed_squirrel Nybegynder
31. oktober 2004 - 18:32 Der er 9 kommentarer og
1 løsning

str_replace med dobbel array

Hejsa

Jeg har denne her stump kode:

    $chartable = array("", "&nbsp;", "!", "&quot;", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "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", "[", "&#92;", "]", "^", "_", "`", "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", "{", "|", "}", "~", "&aelig;", "&AElig;", "&oslash;", "&Oslash;", "&aring;", "&Aring;");
    $hextable = array("", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "E6", "C6", "F8", "D8", "E5", "C5");

    for($i = 0; $i < ceil(strlen($new2)); $i++)
    {
        $hex2 = str_replace($hextable, $chartable, $new2);
    }

Hvis jeg så smider denne HEX tekst igennem:

48 76 6F 72 64 61 6E 20 6B 61 6E 20 64 65 74 20 76 E6 72 65 20 61 74 20 64 75 20 69 6B 6B 65 20 68 61 72 20 66 75 6E 64 65 74 20 75 64 20 61 66 20 64 65 74 20 6E 6F 67 65 74 20 66 F8 72 3F 21

får jeg dette:

H v o r d a n k a n d e t v æ r e a t d u i k k e h a r f u n d e t u d a f d e t n o g e t f ø r ?

Og det er også næsten rigtigt, for den laver ikke de mellemrum der skulle være i stedet for 20 og laver ikke ! i stedet for 21

Men hvis jeg smider den samme tekst igennem dog uden mellemrummene får jeg dette:

H7fF7%F1nkanoWGng%V17FGV9kk6V8a7%gVEoWGVF1foWFEog6WFo87"F

Egenlig ville jeg jo godt have at den fjernede mellemrummene mellem bogstaverne med mindre der var 20 (Chr SPACE)

Hvordan kan det være??

Er der noget jeg har overset??
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 18:43 #1
Hvad hvis du replacer " " med "" inden du udskriver ?
Avatar billede erikjacobsen Ekspert
31. oktober 2004 - 19:07 #2
Jeg synes ikke din tabel passer helt. Jeg har rettet den lidt, men jeg tror ikke
den er helt korrekt. Kig på:
http://test.n0p.com/eksperten/556446/
strtr er bedre til at lave multiple erstatninger.
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 19:16 #3
Kunne også bruge de indbyggede funktioner istedet for at definere dine egne arrays.

<?php
$hexstr = "48 76 6F 72 64 61 6E 20 6B 61 6E 20 64 65 74 20 76 E6 72 65 20 61 74 20 64 75 20 69 6B 6B 65 20 68 61 72 20 66 75 6E 64 65 74 20 75 64 20 61 66 20 64 65 74 20 6E 6F 67 65 74 20 66 F8 72 3F 21";
$hexarr = explode(" ", $hexstr);
$str = "";
foreach ($hexarr AS $val) {
    $str .= chr(hexdec($val));
}
echo $str;
?>
Avatar billede pissed_squirrel Nybegynder
31. oktober 2004 - 20:07 #4
erikjacobsen: Hvorfor har du fjernet 28? Ifølge Asciitable.com er 28 (
Avatar billede pissed_squirrel Nybegynder
31. oktober 2004 - 21:54 #5
hmortensen smider du lige et svar??

Din løsning er jo langt bedre end min
Avatar billede pissed_squirrel Nybegynder
31. oktober 2004 - 21:59 #6
Og dog, den virker jo ikke hvis der ikke er nogle mellemrum i hex:

48766F7264616E206B616E206465742076E6726520617420647520696B6B65206861722066756E64657420756420616620646574206E6F6765742066F8723F21
Avatar billede erikjacobsen Ekspert
31. oktober 2004 - 22:06 #7
Jeg fjernede en tilfældig for at få rettet op på en "off by one" senere.
Du har sikkert ret i at det ikke er den rigtige ;)
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 22:11 #8
Så må det blive:
<?php
$new2 = "48 76 6F 72 64 61 6E 20 6B 61 6E 20 64 65 74 20 76 E6 72 65 20 61 74 20 64 75 20 69 6B 6B 65 20 68 61 72 20 66 75 6E 64 65 74 20 75 64 20 61 66 20 64 65 74 20 6E 6F 67 65 74 20 66 F8 72 3F 21";
$new3 = str_replace(" ", "", $new2);
$str = "";
for ($i=0;$i<=strlen($new3)-2;$i=$i+2) {
    $str .= chr(hexdec(substr($new3, $i, 2)));
}
echo $str;
?>
Avatar billede pissed_squirrel Nybegynder
31. oktober 2004 - 22:18 #9
Meget dejligt

Nu ville et svar være dejligt så du kan få dine point
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 22:20 #10
Ok
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