kostenloser Webspace werbefrei: lima-city


PHP Array an Javascript Funktion übergeben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo zusammen,

    ich rufe in meinem Code bei einem onmouseover Event eine Javascript Funktion auf und möchte zwei PHP Variablen und ein PHP Array an die Funktion übergeben. Mit den Variablen mach ich das so:

    onmouseover="showInfo('<?php echo name; ?>', '<?php echo $ranks; ?>');"


    Aber wie kann ich nun zum Beispiel das PHP Array mit dem Namen $array an die Funktion übergeben? Ich kann da ja nicht einfach "echo $array" hinschreiben.

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Mach es so:
    <?php
    $array = array("hackyourlife" => 18186, "ultimate-bravery" => 2288);
    $jsarray = json_encode($array);
    echo("var x = $jsarray;");
    Dann kümmert sich PHP selbst darum das richtig zu konvertieren. Das funktioniert übrigens immer und sorgt dafür, dass egal was in der Variablen auch stehen mag, es jedenfalls richtig zu JavaScript konvertiert wird, also auch bei Strings, Zahlen, Objekten usw.
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    hackyourlife schrieb:
    Mach es so:
    <?php
    $array = array("hackyourlife" => 18186, "ultimate-bravery" => 2288);
    $jsarray = json_encode($array);
    echo("var x = $jsarray;");
    Dann kümmert sich PHP selbst darum das richtig zu konvertieren. Das funktioniert übrigens immer und sorgt dafür, dass egal was in der Variablen auch stehen mag, es jedenfalls richtig zu JavaScript konvertiert wird, also auch bei Strings, Zahlen, Objekten usw.


    Ok danke für die schnelle Antwort. Also ich mache jetzt so den Funktionsaufruf:

    onmouseover="showInfo('<?php echo $name; ?>', '<?php echo json_encode($masteries_api->{$id}->description); ?>', '<?php echo $ranks; ?>');"


    Das Array kommt aus einer API. So steht es in der API:

    "description": [
    "+2% Cooldown Reduction and reduces the cooldown of Activated Items by 4%",
    "+3.5% Cooldown Reduction and reduces the cooldown of Activated Items by 7%",
    "+5% Cooldown Reduction and reduces the cooldown of Activated Items by 10%"
    ]

    So steht es dann allerdings auch im Seitenquellcode, beim Funktionsaufruf:

    onmouseover="showInfo('Double-Edged Sword', '["+2% Cooldown Reduction and reduces the cooldown of Activated Items by 4%", "+3.5% Cooldown Reduction and reduces the cooldown of Activated Items by 7%", "+5% Cooldown Reduction and reduces the cooldown of Activated Items by 10%"]', '1');"

    Da in der Variable/Array ein Anführungszeichen drin vor kommt, wird das onmouseover Event damit beendet und somit wird meine Seite gerade verbuggt dargestellt. Hast du da eine Lösung für?
  5. hey :)

    das kannst du mit html_entity_decode() machen. http://php.net/manual/en/function.html-entity-decode.php
    onmouseover="showInfo('<?php echo $name; ?>', 
    '<?php echo html_entity_decode(json_encode($masteries_api->{$id}->description), ENT_QUOTES); ?>', 
    '<?php echo $ranks; ?>');"

    Ich gebe zu html_entity_decode ist etwas mit Kanonen auf Spatzen geschossen, aber es erfüllt deine Ziele auf jeden Fall. Alternativ kann man auch mit str_replace arbeiten. http://php.net/manual/en/function.str-replace.php

    Jedoch bin ich mir nicht sicher was du genau machen willst. hackyourlife hat dir eine Möglichkeit gegeben wie du das Array noch in JS als Array interpretieren kannst. Wenn ich mir aber dein Code ansehe vermute ich, dass du das Array als zusammenhengenden Text haben willst, kann das sein?
    Das würde man dann nicht mit json_decode machen, sondern mit implode. http://php.net/manual/en/function.implode.php
    onmouseover="showInfo('<?php echo $name; ?>', 
    '<?php echo html_entity_decode(implode($masteries_api->{$id}->description), ENT_QUOTES); ?>', 
    '<?php echo $ranks; ?>');"

  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Da in der Variable/Array ein Anführungszeichen drin vor kommt, wird das onmouseover Event damit beendet und somit wird meine Seite gerade verbuggt dargestellt. Hast du da eine Lösung für?
    Du könntest
    htmlspecialchars()
    mit der Option
    ENT_QUOTES
    bemühen:
    $js = htmlspecialchars(json_encode($array), ENT_QUOTES);
    echo("<tag arg="$js" />");


    // EDIT
    the-8-beta nutzt die falsche Funktion (decodieren statt encodieren), das ist deshalb nicht empfehlenswert. Der Rest mit
    str_replace
    ,
    implode()
    o.ä. ist überhaupt nicht empfehlenswert, da du schneller eine Lücke hast (XSS o.ä.), als dir lieb ist.

    Beitrag zuletzt geändert: 27.11.2014 22:25:05 von hackyourlife
  7. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ok danke für eure Antworten. Also ich wollte in der Javascript Funktion dann jeden Wert aus dem Array mit noch bisschen HTML Code dazwischen zu einem String machen. Mir ist dann eingefallen, dass ich das genauso gut in PHP machen kann und dann den String an die Funktion übergeben kann. Danke trotzdem für eure Antworten :)
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!