JavaScript と PHP だけで JSONP の挙動を確認したいのですが…


jQueryを使用せず、JavaScriptとPHPだけでJSONPの挙動を確認したいのですが…

▼index.html

[code]

    function check(arg) {
      var script = document.createElement('script');
      script.type = "text/javascript"; 
      script.src = 'hoge.php?arg='+arg;
      document.body.appendChild(script);
    }
    function callback(last) {
      console.log(last)
    }
    
[/code]

▼hoge.php

[code]

    $arg = ($_GET['arg']);
    print "callback($arg);";
    
[/code]

このとき、引数を数字にすると問題ないのですが、文字列へ変更するとエラーになります  
・check(9); … 〇  
・check('沖縄'); … ×

・どう修正すればよいでしょうか？  
・JSONPではなく、エスケープの問題？




PHPで `"なんとか $hoge かんとか"` といった感じで変数の値を埋め込む場合、自動的に引用符で囲まれる、といったことはありません。もし
`callback('沖縄')` という形に展開したいのであれば、自分で引用符で囲む必要があります。

が、JSONPということですし `json_encode()` を使ってはいかがでしょう。

[code]

    $arg = json_encode($_GET['arg']);
    print "callback($arg)";
    
[/code]

なお `$_GET` に含まれる値は全て文字列になっているので、もし数値を数値としてJSONにエンコード、コールバック関数に渡したいのであれば、
[`is_numeric()` 等で判別して数値に変換する](http://php.net/manual/ja/function.is-
numeric.php#107326)といった処理が必要になります。




PHPで `"なんとか $hoge かんとか"` といった感じで変数の値を埋め込む場合、自動的に引用符で囲まれる、といったことはありません。もし
`callback('沖縄')` という形に展開したいのであれば、自分で引用符で囲む必要があります。

が、JSONPということですし `json_encode()` を使ってはいかがでしょう。

[code]

    $arg = json_encode($_GET['arg']);
    print "callback($arg)";
    
[/code]

なお `$_GET` に含まれる値は全て文字列になっているので、もし数値を数値としてJSONにエンコード、コールバック関数に渡したいのであれば、
[`is_numeric()` 等で判別して数値に変換する](http://php.net/manual/ja/function.is-
numeric.php#107326)といった処理が必要になります。

