양식 필드의 내용을 AJAX를 통해 PHP 스크립트에 게시하고 JavaScript를 escape(field_contents)
에 게시하고 있습니다. 문제는 모든 더하기 기호가 제거되고 공백으로 대체된다는 것입니다. 어떻게하면 안전하게 + 부호를 인코딩 한 다음 PHP 측에서 적절하게 '디코딩'할 수 있습니까?AJAX POST 및 더하기 기호 (+) - 인코딩 방법?
답변
JS 및 PHP에서 encodeURIComponent()를 사용하면 올바른 값을 받아야합니다.
참고 : PHP에서 $_GET
, $_POST
또는 $_REQUEST
에 액세스하면 이미 디코딩 된 값을 검색하게됩니다.
예 : 당신의 JS에서
: 서버에
// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
:
echo $_GET['string']; // "+"
그것은 URL 인코딩 된 데이터를 포함에만 원시 HTTP 요청입니다.
GET 요청의 경우 URI. $_SERVER['REQUEST_URI']
또는 $_SERVER['QUERY_STRING']
에서 검색 할 수 있습니다. urlencode되고 POST를 들어, file_get_contents('php://stdin')
주의 :
decode()
에만 단일 바이트 인코딩 된 문자를 사용할 수 있습니다. 전체 UTF-8 범위에서는 작동하지 않습니다.
예 :
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
참고 UTF-8에서를 나타내는 바이트 시퀀스 (\xc4\x80
)이다 escape('\xc4\x80')
: "%C4%80"
는 동일하다. 따라서 encodeURIComponent()를 사용하는 경우 서버 측에서 UTF-8을 수신하고 있음을 알아야합니다. 그렇지 않으면 PHP가 인코딩을 조작합니다.
후속 조치 : encodeURIComponent (텍스트)와 텍스트에 스마트 따옴표 (&rsqo;)와 같은 문자가 포함 된 경우 PHP 스크립트에 정크 문자가있는 것 같습니다. 나는 그것이 charset 문제라고 생각하지만, 그것을 해결하는 방법을 모른다. "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8"을 사용하여 AJAX POST를 수행하고 서버 측에서 PHP5를 사용하고 있습니다. – jalperin
이 캐릭터를 어떻게보고 있습니까? 브라우저가 UTF-8인지 확인해야합니다. HTML에서는''또는'을 설정할 수 있습니다 PHP에서 Content-Type HTTP 헤더를 사용합니다.'헤더 ('Content-Type : text/html; charset = UTF-8');'PS : &rsqo;은 브라우저 (FF3.5)에서 디코딩되지 않습니다. – bucabay
나는 너희들을 사랑한다! 너는 항상 나를 도와 줘 !! :) – Alejandra
자바 스크립트에서 시도 :
encodeURIComponent()
및 PHP에서을 :
urldecode($_POST['field']);
encodeURIComponent가 올바른 대답입니다.하지만 URL 인코딩 된 데이터와 HTML 인코딩 된 데이터는 생성되지 않으므로 html_entity_encode는 off입니다. – Quentin
당신이 찾고있는 16 진수 값은 %2B
가 자동으로 PHP에서 그것을 얻을 urlencode($stringVal)
를 통해 문자열을 실행하는 것입니다 . 그리고 그것을 되 찾으려면 urldecode($stringVal)
을 실행하십시오.
당신은 자바 스크립트를 처리하는 경우
escape(str)
편집
를 사용하고 그는 올바른 것입니다. encodeURIComponent(str)
및 decodeURIComponent(str)
을 사용하십시오. 이스케이프는 문자를 변환하지 않고 \
의 문자로 변환합니다.
* JavaScript에서는'escape' (또는'unescape')을 사용하지 마십시오; 그들은 URL 인코딩과 같지 않으며 + 및 모든 ASCII가 아닌 유니 코드 문자에 대해 잘못 될 것입니다. encodeURIComponent/decodeURIComponent는 거의 항상 당신이 원하는 것입니다. – bobince
PHP에서 컬을해야하는 경우 PHP에서 개별적으로 urlencode()
을 사용해야합니다. 당신이 urlencode(strPOST)
을 할 경우
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
, 당신은 당신에게 또 다른 문제를 가져올 것이다, 당신은 변경 %의 XX 값을하고 하나 개의 값으로 될 것입니다 하나의 항목 1과 &이있을 것이다, 여기에 아래로 수익을 볼!
예 1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
예 2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
예 1 수용체는 동일 참조하지 않을 컬
예 2 쇼 POST의 문자열을 준비하는 좋은 방법 앰퍼샌드와 두 값을 구별합니다!
내 문제는 악센트 (á É N)와 내가 MySQL은 자바 스크립트 "코드 예제"를 저장하려고 더하기 기호 (+)와 함께였다
내 솔루션 (안 더 좋은 방법이 있지만,) 작동 :
는자바 스크립트 :
function replaceAll(text, busca, reemplaza){
while (text.toString().indexOf(busca) != -1)
text = text.toString().replace(busca,reemplaza);return text;
}
function cleanCode(cod){
code = replaceAll(cod , "|", "{1}"); // error | palos de explode en java
code = replaceAll(code, "+", "{0}"); // error con los signos mas
return code;
}
기능은 저장 :
function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();
var result = null;
$.ajax({
datatype : "html",
data: myData,
url: url,
success : function(result) {
alert(result); // result ok
},
});
} // end function
쿵푸 php에서 :
<?php
function save($pid,$code){
$code= preg_replace("[\{1\}]","|",$code);
$code= preg_replace("[\{0\}]","+",$code);
mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
더 재미 있고 잘하면 다른 사람을 위해 당기는 머리카락을 가능하게하십시오. python을 사용하여 curl을 사용하여 구성 할 수있는 장치 용 사전을 작성했습니다.
문제 : {"timezone":"+5"} //throws an error " 5"
솔루션 : {"timezone":"%2B"+"5"} //Works
그래서, 요컨대 :이 게시물에 대한
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
감사합니다!
- 1. URL 및 더하기 기호
- 2. vb.net에서 더하기 기호 "+"바꾸기
- 3. Apache mod_rewrite % 2B 및 더하기 기호 (+)
- 4. 더하기 기호 난에 본 적이
- 5. iframe 및 Ajax $ .post
- 6. AJAX POST 및 PHP
- 7. 더하기 기호를 입력하는 방법 ASP.NET Ajax HTMLEditor
- 8. UITextField에서 더하기 기호 (+) 백스 페이스 - 이상한 버그
- 9. 이 신비한 매크로 더하기 기호 stdint.h 무엇입니까?
- 10. jQuery blockUI 및 AJAX POST
- 11. Ajax POST 및 Django Tastypie
- 12. 더하기 기호 (+)로 시작하는 줄에서 단락을 만드는 방법
- 13. Ajax 편집기에 수학 기호 및 방정식을 포함하는 방법
- 14. $ .ajax (... type : "POST", dataType : "JSON"...) 및 $ .post (..., "JSON") 사이의 차이점
- 15. POST 대 Ajax 호출
- 16. Secure ajax form POST
- 17. jQuery, Rails 및 Ajax 데이터베이스에 대한 POST
- 18. 크로스 도메인 Ajax POST 및 사용자 확인
- 19. GET 및 POST AJAX 요청을 동시에 보내십시오.
- 20. HTML 형식 POST 데이터 인코딩
- 21. $ .ajax Post POST 데이터를 보내지 않음 요청
- 22. HTTP POST 작성자 : AJAX
- 23. 가상 양식과 Ajax POST
- 24. jquery. post 또는 .ajax
- 25. AJAX XMLHttpRequest POST
- 26. $ .post 대 $ .ajax
- 27. Firefox 빈 POST $ .ajax
- 28. CKFinder의 AJAX POST 문제
- 29. ASPX ajax form post
- 30. jquery ajax 인코딩 문제!
명확히하기 위해 나는 encode하지 않고 escape (field_contents)를 사용했습니다 – jalperin