1

CKEDITOR と ajax を使用して、作成した Web サイトにニュースを投稿しています。

すべて正常に動作しますが、たとえば、投稿時にstyle="display:none"を含むテキストを送信すると、403 エラーが発生するようです。その行を削除するか、 style="misplay:none"のような文字を変更すると、起こりません

これが私のコードです

PHP

$title=$this->input->post('title');
$body=$this->input->post('body');
$published=$this->input->post('published');
$tags=$this->input->post('tags');

Ajax 呼び出し

$.ajax({
    url: '/reviews_aj/addreviews',
    type: 'POST',
    data: {'title':title,'body':body,'published':published,'tags':tags},
    success: function(result){
         ...            

    }
});

最も奇妙な部分は、addreviews関数が実際に呼び出されているのに、$_POST が空のように見え、403 エラーが返されることです。

送られてくるのはこれ

id=18&title=asdasdas&body=style%3D%22display%3Anone%22&published=false&tags=

var_dump($_POST); 空の配列を返します。

私は問題がJqueryであると考え始めました。どういうわけか特別な文字を間違った方法で変換しています(そしてCodeigniterのuriの再ルーティングをいじっています。

@sherhamsの編集 これを試すように頼まれました。

var temp = {'title':title,'body':body,'published':published,'tags':tags}; 
console.log( JSON.stringify(temp, undefined, 4) );

これが出力です

{
    "title": "style=\"display:none\"",
    "body": "<p>\n\tasdasd</p>\n",
    "published": false,
    "tags": ""
}

私が期待したものとまったく同じように見えます

編集:

単純な POST (単純なフォームである ajax ではありません) で送信しても機能しないことに気付きました。

編集:

style='display:none' は一重引用符で動作しますが、CKEDITOR の出力は制御しませんが、二重引用符と一重引用符の両方で動作するはずです

4

4 に答える 4

0

このように二重エンコードして送信するのはどうですか?

<?php $string = urlencode(urlencode("style=\"display: none;\"";)) ?>

次に、そのエンコードされた文字列をajax経由で送信します。

$.ajax({
    url: '/reviews_aj/addreviews/$string',
    type: 'POST'
});

もう一方の端では、セグメントを使用してデコードします。

$text = urldecode(urldecode($this->uri->segment(3)));
于 2012-06-09T04:41:20.700 に答える
0

「display:none」の場合に問題が発生するというあなたのコメントによると、

要素が表示されていない場合、要素は常に奇妙で予期しない動作をします。位置を変更せず、一部のブラウザーで innerHTML を返さないなど...

ブラウザがそれを「役に立たないもの」ビンにダンプし、すべてのコネクタを正常な動作から切断して、メモリ/ CPUスペースなどを節約するためだと仮定します。

ビューポート ("position:absolute;top:-100px;left:-100px;") の絶対的な「外側」に配置し、コードをチェックして機能を確認してください。

とにかく非表示の場合は、ページのどこにあるかは問題ではありません。

于 2012-06-15T07:17:58.390 に答える
0

を使うべきだと思いますsite_url()。のような URL で何が起こるかわかりません/foo/bar

同様の質問に対する回答は次のとおりです。試してみる :)

<script type="text/javascript">
    var site_url = '<?php echo site_url(); ?>';
    var url = site_url + '/controller/action/param1/param2';
    // AJAX with url
</script>

うまくいかない場合は、ログを調べてみてください。おそらく、どの URL が実際に要求されたかがわかります。

于 2012-06-13T10:54:14.567 に答える
0

二重引用符を一重引用符に変更してください:D!

于 2012-06-09T00:48:51.427 に答える