2012-04-20 3 views
1

좋아요. 몇 시간 동안 이걸로 어지럼 쳤습니다. 아직 제대로 이해하지 못해서 여러분에게 물어볼 것입니다.JS/PHP는 urlencoding과 urldecoding을 교차합니다.

나는 html로 텍스트 영역을 가지고있다. 그 값은 아약스 (jquery)를 사용하여 PHP로 보내야하고 데이터베이스로 전달되어야하며 PHP를 사용하여 다시 인쇄 할 수 있어야한다. 문제는 인쇄가 당신이 입력 한 내용과 100 % 동일 할 때 내가 원하는입니다 '\ 지금 그것을 할 방법

같은 문자를 포함 :.

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

는 값입니다. 나는 ajax 함수를 사용하여 PHP에 comment을 전달하고 POST 데이터로 제출합니다. 이것이 무엇 불을 지르고를 사용

가 보내 나타납니다 : PHP에서 comment=asdf%27asdf

인쇄 $_POST['comment']은 추가 \이 문제가 나 asdf\'asdf

에게 제공합니다. 나는 그것을 제거해야합니다.

어느 쪽이든에만 자바 스크립트 탈출 PHP에서 안전하지 않기 때문에 나는 또한 urlencode()

을하고 인쇄 할 때 내가 rawurldecode()

너희들이 방법이 좋은 경우 지적, 또는 그것이 될 수 있다면 수 사용 잘 했어.

어떻게는 내가 사전에 $_POST['comment']

덕분에 새로운 \의 데이터베이스에 저장된 텍스트를 인쇄 할 때, \'는 다음과 같이 표시됩니다

MakuraYami

답변

2

슬래시가 자동으로 추가되며 PHP 또는 설정을 변경할 수 있습니다 (일반적으로하지 말아야 함). stripslashes() (PHP: stripslashes)을 사용하여 되돌릴 수 있습니다. 표시하기 직전에이 기능을 사용하십시오. 따라서 데이터베이스에 저장하기 전에는 사용하지 마십시오.

PHP가 이미 전송 된 경우 (urlencode가 전송되기 전에 필요함) 더 이상 urlencode 할 필요가 없으며 데이터베이스 안전성을 확인하기 만하면됩니다.

불행히도 URL 인코딩을위한 가장 좋은 방법은 무엇인지 조언 해 드릴 수는 없지만 직접 혼란스러워하는 경향이 있습니다. 다른 누군가가 그 점을 분명히 밝힐 수 있기를 바랍니다.

+0

좋아,이 꽤 잘 작동, 내가 자바 스크립트에서 urlencoded 문자열을 보내지만 php 그것 더 이상 인코딩 된 awsnt 때문에 혼란스러워 생각 :/어쨌든 stripslashes를 사용하여 지금은 입력 된 동일한 표시합니다! – MakuraYami

1

를 제거합니까 '. 따라서 데이터베이스에 \' 값을 저장하는 것이 좋습니다.

jQuery를 사용하여 요청을하면 요청 전에 '자를 벗어날 필요가 없습니다.이 요청은 올바르게 포장되어야합니다.

그러나 데이터베이스에 저장하기 전에 텍스트를 살균하려면주의해야합니다 (mysql_real_escape_stringhttp://php.net/manual/en/function.mysql-real-escape-string.php 사용).

+0

감사합니다. 그러나 실제로 어떻게 표시되는지 테스트하지 않았다고 생각합니까? \ 내가 인쇄 할 때, 그게 문제 야.그리고 mysql_real_escape_string이 에러를 내고, 연결을 찾을 수 없다고 말하며, 나는 sql-injection을 막기 위해 PDO 함수를 사용합니다. – MakuraYami

+0

나는 본다. Armatus가 제안한 것처럼 텍스트를 표시하기 전에'stripslashes' 함수를 사용할 수 있습니다. PDO를 사용한다면'mysql_real_escape_string'을 호출 할 필요가 없습니다. 자바 스크립트에 관해서는, 나는 여전히 수동으로 탈출하지 않는 것이 좋습니다. –

+0

나는 당신이 자바 스크립트에서 문자열을 제출할 때 & 문자를 사용하여 POST가 그것을 죽일 것이기 때문에 탈출을한다. 왜냐하면 다음 var이 만들어 졌다고 생각하기 때문이다. – MakuraYami