私の PHP コードには、次のような文字列変数がいくつかあります。
"A piece of text with sometimes 'simple quotes' in it, and most important,
some parts "between double quotes" inside the string itself, playing the role
of quotations marks"
残念ながら、このデータはデータベースから取得しているため、JSON 文字列形式にする必要があります。によって生成された JSON オブジェクトをループしてjson_encode
(データを PDO で連想配列として取得し、それをエンコードします) addslashes
、ループ内のすべての文字列に対して使用すると、単純な引用符だけがエスケープされます。
(整形式ではないことはわかっていますが、これがデータベースから取得する方法です...)
最も奇妙なことは、ドキュメントで、この関数で二重引用符をエスケープできることがわかったので、エスケープされるかどうかを確認するために、文字列の最初の位置に別の引用符を配置しようとしたことです。
$mystring = '"' . $mystring;
それはエスケープされており、文字列の後半にある他のものがエスケープされていない理由がわかりません。
これが私の現在のスニペットです(二重引用符をエスケープしていません):
$dbh = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE, DB_USER, DB_PASSWORD);
$data = $dbh -> query("MY SELECT REQUEST");
$result = $data -> fetchAll(PDO::FETCH_ASSOC);
$result_inter;
foreach ($result as $key => $entry) {
foreach ($entry as $key2 => $entry_inter) {
$new_value = $entry_inter;
$new_value = strip_tags($new_value);
$new_value = addslashes($new_value);
$new_key[$key2] = $new_value;
}
$result_inter[$key] = $new_key;
}
$result = json_encode($result_inter);
echo($result);
誰かがこれを解決する方法について手がかりを持っているなら、私は感謝しています。