0

ユーザーがHTMLテンプレートを作成してデータベースに保存できるアプリケーションに取り組んでいます。テンプレートは、テキスト、画像などのさまざまなコンポーネントで構成されています。アポストロフィ 'を使用してテキストを保存しようとすると、 mysql_error(明らかに)表示されます。それを無効にしようとしましたが、機能しましたが、編集目的mysqli_real_escape_stringsで保存されたコンテンツを取り戻したいので、アポストロフィは(スラッシュ)を使用してエスケープされます。したがって、コンテンツは内部で変更され、編集するための有効なhtmlではなくなり、ブラウザは構文エラー。 また、エスケープするために他の関数を検索しようとしましたが、それはmysqlによって受け入れられません。\
json_encode
誰かがphpでこれを行う関数を教えてもらえますか?私のためにタスクを実行する関数を提案してください!

アップデート:

  function saveContent(){   
    var $getContent = $('#mainWrap').clone();
    $getContent.find('.textBox, .pictureBox').removeAttr('id');
    var saveContent  = $getContent.wrap('<div></div>').html();
    console.log(saveContent);
    var getBodyStyle=$('body').attr('style');
    console.log('this is body style'+getBodyStyle);
    var auto="auto";
    $.ajax({
        url:"auto_save.php",
        type:"POST",
        dataType:"text",
        //data:"txtComp="+saveContent+"&auto="+auto+"&pageId="+pageId+"&webId="+webId+"&userId="+userId+"&bodyStyle="+getBodyStyle,
        data: {txtComp: saveContent, auto: auto, pageId: pageId,webId:webId,userId:userId,bodyStyle:getBodyStyle}
    }); 
 }  

にを追加mysql_real_escape_stringしますauto_save.php。これで、DBからフェッチして戻すときに、このようなjavascript変数に渡す必要があります。

    var getSavedContent = <?php echo json_encode($IdLessContent); ?>;

それが問題になる可能性はありますか?

4

2 に答える 2

2

stripslashes()文字列からスラッシュを削除し、エスケープされたデータを出力するときに役立ちます。

私はあなたがこれを使う必要があると信じています:

json_encode($IdLessContent, JSON_UNESCAPED_SLASHES);

UNESCAPED_SLASHES部分を使用すると、データが正しく返されるはずです。

于 2013-02-28T11:12:15.740 に答える
2

モンキーマトリックスの答えは、最近のバージョンのPHPでは正しくありません(7.3でテストしました)。 mysqli_real_escape_string()特定の文字のみをエスケープします。これを逆にする関数は次のとおりです。

function reverse_mysqli_real_escape_string($str) {
    return strtr($str, [
        '\0'   => "\x00",
        '\n'   => "\n",
        '\r'   => "\r",
        '\\\\' => "\\",
        "\'"   => "'",
        '\"'   => '"',
        '\Z' => "\x1a"
    ]);
 }

適切に作成されたアプリケーションでは、この関数が必要になることはめったにありません。エスケープを自動的に処理するには、パラメータバインディングでPDOを使用する必要があります。この関数は、入力時にすべてをエスケープしていたレガシーコードを処理するためにのみ作成したものであり、元のデータに戻す方法が必要でした。

于 2019-02-04T04:38:38.297 に答える