JavaScript/AjaxとPHPの組み合わせを使用してMySQLテーブルに文字列を挿入しようとしています。Ajaxを使用して目的の(JavaScript)文字列をPHPスクリプトに渡した後、PHPを使用してそれをテーブルに挿入しようとします。
PHPスクリプトは機能していますが、一重引用符(')が検出されるとすぐに、挿入はその時点で停止します。mysql_real_escape_string()、addslashes()、htmlentities()、str_replace()をさまざまな組み合わせで使用してみましたが、魔法の引用符をオンまたはオフにして、一重引用符を処理できません。それらを保存するか、適切にエスケープしたいのですが、何も機能していません。文字列自体はツイートからのものなので、エンコードの競合が原因である可能性がありますか?これを克服する方法についてのアドバイスをいただければ幸いです。
たとえば、わかりやすく説明するために、この文字列をPHPスクリプトに渡すと次のようになります。
投票しないと約束してください
次に、上記のいずれかの方法で文字列をサニタイズし、MySQLテーブルに挿入すると、MySQLテーブルでは常にそのように表示されます。
あなたが勝ったと約束してください
これが私のphpコードです:
include("dbconnect.php"); //connect to DB
$tweet = mysql_real_escape_string($_POST['tweet']); //escape the string
if($tweet != '') { //check it's not empty
$query = "insert into Tory (Content) values('$tweet')"; //insert statement
$link = mysql_query($query);
if (!$link) {
echo "3";
die($result);
}
echo "<p>".$tweet."</p>"; //for Ajax callback
}
Javascript/Ajaxコードは次のとおりです。
$.ajax({
type: 'POST',
url: 'buildTable.php', //previous php code
data: "tweet=" + content, //content is the tweet string as javascript var
success: function(thetweet) {
$(document.body).append(thetweet);
}
});
編集:提供されたすべてのコメントとアドバイスをありがとう。私が使用した一時的な解決策は、文字列をPHPスクリプトに渡す前に、一重引用符のすべてのインスタンスをクライアント側で円記号に置き換えることです。次に、PHPまたはJavaScriptで取得するときに、一重引用符に戻します。