jsonp を使用して、Web サーバーからアプリケーション (sencha に組み込まれている) にデータを要求しています。リクエストには「sokt」と呼ばれる動的パラメータがあります。パラメータにスウェーデン文字 (å、ä、ö) がある場合とない場合があります。
スウェーデン語の文字がない限り、サーバーは期待される結果を返します。例: http://mywebsite.se/jsonnew.php?sokt=test&_dc=1370095960312&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback31
ただし、リクエストにスウェーデン語の文字が含まれている場合、サーバーは何も返しません。例:
http://mywebsite.se/jsonnew.php?sokt =enastående&_dc=1370096101366&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback39
しかし、リクエスト enastående を enast%E5ende に手動で URL エンコードすると、期待どおりの結果が得られます。
要約すると、問題は、jsonp からの要求がクエリ文字列を URL エンコードせず、応答をフォーマットする php スクリプト (utf_8 ヘッダーを持つ) によって受け入れられない Unicode 文字列を送信することです。これが本当にこれが機能しない理由である場合、私にはわかりませんが、どうすればこれを解決できますか?
コードで編集:
これは私の要求です:
Ext.getStore('storen').setProxy({ type: 'jsonp', url: 'http://mywebsite.se/synonymer/jsonnew.php?sokt=' + param}).load()
そして、これはphpスクリプトです:
<?php
header('Content-Type: text/javascript; charset=utf8');
include("config.php");
$dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sokt = $_GET['sokt'];
$stmt = $dbh->prepare("SELECT * FROM table WHERE w1 = :sokt");
$stmt->bindParam(':sokt', $sokt);
$stmt->execute();
$output = array();
while ( $row = $stmt->fetch() ) {
$output[] = array("key" => utf8_encode($row['w2']));
}
$callback = $_REQUEST['callback'];
// Create the output object.
//start output
if ($callback) {
echo $callback . '(' . json_encode($output) . ');';
} else {
echo json_encode($output);
}
?>