web-dev-qa-db-ja.com

クラスstdClassのオブジェクトをJSONオブジェクトに変換します

これは私が私のphpファイルに持っているものです:

_$session = $m->session;
_

$ sessionは現在:

_object(stdClass)[31]
  public 'id' => string '21112' (length=5)
  public 'external_id' => string '' (length=0)
  public 'sessiongroupid' => string '1843' (length=4)
  public 'eventid' => string '5588' (length=4)
  public 'order' => string '0' (length=1)
  public 'name' => string 'Ferdau Conference' (length=17)
  public 'description' => string 'Ferdau Conference' (length=17)
  public 'starttime' => string '2013-04-18 18:00:00' (length=19)
  public 'endtime' => string '2013-04-18 18:04:00' (length=19)
  public 'speaker' => string '' (length=0)
  public 'location' => string 'Waregem' (length=7)
  public 'mapid' => string '0' (length=1)
  public 'xpos' => string '0.000000' (length=8)
  public 'ypos' => string '0.000000' (length=8)
  public 'maptype' => string 'plan' (length=4)
  public 'imageurl' => string '' (length=0)
  public 'presentation' => string '' (length=0)
  public 'organizer' => string '0' (length=1)
  public 'Twitter' => string '' (length=0)
  public 'allowAddToFavorites' => string '0' (length=1)
  public 'allowAddToAgenda' => string '0' (length=1)
  public 'votes' => string '0' (length=1)
  public 'url' => string 'http://ferdau.be' (length=16)
  public 'venueid' => string '0' (length=1)
_

Javascriptファイルのsaveという名前の関数にすべての情報を送信したいと思います。このような:

_echo '<a onclick="save('.$session.')" style="cursor:pointer;" class="metacell">
                        <img src="'.buildUri("images/icons/favorite.png").'" width="16" />
                        <span>Add to favorites</span>
                    </a>';
_

これを試してみると、文字列しか送信できないというエラーが常に発生します。このオブジェクトをjavascript関数に送信できるものに変換するにはどうすればよいですか?

私はこれを試しましたが結果はありません:$data = json_encode($session);

$data = json_encode((array)$session)をするとき

私はこれを得る:

_<a class="metacell" style="cursor:pointer;" ferdau.be","venueid":"0"})"="" \="" 18:04:00","speaker":"","location":"waregem","mapid":"0","xpos":"0.000000","ypos":"0.000000","maptype":"plan","imageurl":"","presentation":"","organizer":"0","Twitter":"","allowaddtofavorites":"0","allowaddtoagenda":"0","votes":"0","url":"http:\="" 18:00:00","endtime":"2013-04-18="" conference","starttime":"2013-04-18="" conference","description":"ferdau="" id":"21112","external_id":"","sessiongroupid":"1843","eventid":"5588","order":"0","name":"ferdau="" onclick="save({">
_
12
nielsv

$data = json_encode((array)$session);は正しい方法です。

あなたが表示しているhtmlは、firebug/chrome dev tools/IE devtoolsに表示されているものだと思います。これは、ブラウザがレンダリングを試みた後の様子です。生のソースを見て、出力が実際にどのように見えるかを確認してください。この時点での問題は、json_encodeからの二重引用符が原因で、ブラウザエンジンは$dataからの値が終了する前にonclick属性が閉じていると見なします。

HTMLで二重引用符をエスケープするか、単一引用符を使用するかを組み合わせる必要があります。より簡単になるので、一重引用符から始めます。ただし、$dataの値にエスケープされていない一重引用符が含まれていないことも確認する必要があります(同じ問題が発生するため)。

25
Jeffrey Blake