AJAX POST 및 플러스 기호( + ) -- 부호화 방법
폼 필드의 내용을 AJAX를 통해 PHP 스크립트에 POST하고 JavaScript를 사용하여escape(field_contents)
문제는 플러스 기호가 제거되고 공백으로 대체된다는 것입니다.어떻게 하면 PHP 측에서 플러스 기호를 안전하게 'encode'하고 적절한 'decode'를 할 수 있을까요?
사용하다encodeURIComponent()
JS 및 PHP에서 올바른 값을 수신해야 합니다.
주의: 에 액세스 할 수 있습니다.$_GET
,$_POST
또는$_REQUEST
PHP에서는 이미 디코딩된 값을 취득하고 있습니다.
예:
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']
urlencoded POST의 경우file_get_contents('php://stdin')
주의:
decode()
는, 1 바이트로 부호화된 문자에 대해서만 기능합니다.UTF-8 범위에서는 동작하지 않습니다.
예:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
주의:"%C4%80"
는 다음과 같습니다.escape('\xc4\x80')
어느 것이 바이트 시퀀스입니까?)\xc4\x80
를 나타내는 것)Ā
UTF-8을 사용합니다.encodeURIComponent()
서버측에서 UTF-8을 수신하고 있는 것을 알고 있을 필요가 있습니다.그렇지 않으면 PHP는 인코딩을 망칩니다.
JavaScript에서 시도:
encodeURIComponent()
및 PHP:
urldecode($_POST['field']);
찾고 있는 16진수치는 다음과 같습니다.%2B
PHP에서 자동으로 가져오려면 문자열을 실행합니다.urlencode($stringVal)
그리고 힘차게 달려라.urldecode($stringVal)
되찾기 위해서요
JavaScript로 처리하려면 escape( str )
편집
@bobince의 코멘트 후에 나는 더 많이 읽었고 그는 옳았다.사용하다encodeURIComponent(str)
그리고.decodeURIComponent(str)
. 이스케이프는 문자를 변환하지 않고 다음 문자로 이스케이프합니다.\
의
좀 더 재미있게 하고 다른 사람의 머리채를 덜 당길 수 있게 하기 위해서.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])
이 게시물 덕분에!
만약 당신이 php로 컬을 해야 한다면, 당신은 그것을 사용해야 합니다.urlencode()
PHP에서 개별적으로!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
네가 한다면.urlencode(strPOST)
다른 문제가 발생하여 아이템1이1개 있고 %xx 값이 변경되어 하나의 값이 됩니다.여기서 반환을 참조해 주세요.
예 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은 POST 스트링을 컬로 준비하는 좋은 방법입니다.
예 2는 수용체가 두 값을 구별하기 위해 동일한 앰퍼샌드와 앰퍼샌드를 보지 않음을 보여줍니다.
javascript "code example"을 mysql에 저장하려고 할 때 악센트(á)와 플러스 기호(+)가 문제였습니다.
솔루션(더 나은 방법은 아니지만 작동):
javascript:
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'");
}
?>
언급URL : https://stackoverflow.com/questions/1373414/ajax-post-and-plus-sign-how-to-encode
'programing' 카테고리의 다른 글
모든 MUI 컴포넌트에 대해 박스 섀도를 글로벌하게 디세블로 하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
---|---|
코드 분할로 인해 SPA 신규 도입 후 청크가 로드되지 않음 (0) | 2023.03.12 |
어레이 및 기능과의 옵션 체인을 사용하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
Jquery Ajax 웹 서비스에 JSON 게시 (0) | 2023.03.12 |
DISTINCT 키워드를 사용하면 SELECTED 식이 아닌 에러가 발생합니다. (0) | 2023.03.12 |