2012-04-20 6 views
1

申し訳ありません私は今これを何時間も悩まされていますが、私はまだそれを正しく得ることができないので、皆さんに尋ねるつもりです。JS/PHPクロスURLコーディングとurldecoding

私はhtmlのテキストエリアを持っています。値はajax(jquery)を使用してphpに送信し、データベースに帰属し、phpを使用して再び印刷可能にする必要があります。問題は、あなたが入力した内容と同じ100%であることを印刷するときに私が欲しいです私は今それを行う方法'\

のような文字を含む:。

box.find('#newCommentArea').val()が値である
var comment = escape(box.find('#newCommentArea').val()).replace(new RegExp("\\+", "g"),"%2B"); 

。私はcommentをajax関数を使ってPHPに渡し、POSTデータとして送信します。これが何であるかである放火犯を使用して

は、送信するために表示されます:PHPのcomment=asdf%27asdf

印刷$_POST['comment']が追加\が問題である私asdf\'asdf

になります。私はそれを取り除く必要があります。

いずれかの方法だけjavascriptの脱出は、PHPで安全ではないので、私はまた、urlencode()

を行うと、印刷するとき、私はrawurldecode()

は、あなたたちは、この方法が良好であれば指摘し、またはそれができるならばもらえ使用もっとうまくいった。

そして、どのように私は事前に$_POST['comment']

おかげで新しい\を取り除くか、

あなたがデータベースに保存されたテキストを印刷します場合は、\'のように表示されますMakuraYami

答えて

2

スラッシュは自動的に追加され、PHPまたは設定可能なサーバーの設定が変更されます(通常はそうしないでください)。 stripslashes()PHP: stripslashes)を使用して元に戻すことができます。表示する直前にこの機能を使用してください。データベースに保存する前にこの機能を使用しないでください。

すでに送信されている場合は、URLコードを送信する必要はありません。送信する前にurlencodeを指定する必要があります。データベースの安全性を確認する必要があります。

残念ながら、URLエンコードの最善の方法についてアドバイスできません。自分で混乱する傾向があります。誰かがそれを明確にすることを望みます。

+0

申し訳ありませんが、これはかなりうまくいく、私はjavascriptからurlencoded文字列を送信するので、私は混乱していたと思うが、PHPでもうawsntエンコード:/とにかくstripslashesを使用すると、 – MakuraYami

1

'。したがって、値\'をデータベースに保存しても問題ありません。

さらに、jQueryを使用してリクエストを行っている場合は、リクエスト前に'文字をエスケープする必要はありません。これは適切にパックする必要があります。

しかし、データベースに保存する前に、PHPでテキストを墨塗りすることに注意する必要があります(mysql_real_escape_stringhttp://php.net/manual/en/function.mysql-real-escape-string.phpを使用)。

+0

本当にありがとうございますが、私はそれがどのように表示されたかをテストしなかったと思いますか? \私はそれを印刷するときに問題があります。とmysql_real_escape_string私にエラーを与える、それは接続を見つけることができない、私はalredy SQLの注射から保護するPDO関数を使用します。 – MakuraYami

+0

私は参照してください。 Armatusが示唆したように、テキストを表示する前に 'stripslashes'関数を使うことができます。 PDOを使用している場合、 'mysql_real_escape_string'を呼び出す必要はありません。 javascriptに関しては、私は手動でエスケープするのをやめておくことをお勧めします。 –

+0

私はエスケープを行います。なぜなら、&文字を使用してPOSTがJavaScriptを使用して文字列を送信すると、次のvarが作成されたと考えられるからです。 – MakuraYami

関連する問題