PHP---ajax가 POST 값(html 태그 포함)을 제출 페이지에 전달하면 데이터가 손실되거나 왜곡됩니다.

WBOY
풀어 주다: 2016-07-29 09:15:17
원래의
1797명이 탐색했습니다.

문제

?? 텍스트 편집기(html 텍스트)에서 콘텐츠를 가져온 다음 ajax를 사용하여 POST를 통해 텍스트 콘텐츠를 백그라운드로 전달하여 xxx로 저장합니다. html 파일이지만 브라우저에서 이 파일을 열면 데이터가 손실되거나 깨질 수 있습니다.

이유

?? 이는 텍스트에 html 태그가 포함되어 있기 때문입니다. POST를 사용하여 값을 전송할 때 값 내용에 있는 '&'와 같은 일부 문자가 값에 영향을 미치기 때문입니다. 변수가 추출되어 문자가 깨지거나 데이터가 손실됩니다.

해결책

?? 전달할 HTML 텍스트 내용을 인코딩한 후 전달합니다. 그런 다음 브라우저의 자동 디코딩을 사용하십시오.

인코딩 함수

??encodeURIComponent() 함수는 문자열을 URI 구성 요소로 인코딩할 수 있습니다. 이 방법은 ASCII 문자와 숫자를 인코딩하지 않으며 다음 ASCII 문장 부호 문자도 인코딩하지 않습니다: - _ ~ * ’ ( ) .
기타 문자(예: URI 구성 요소를 구분하는 데 사용되는 구두점인 ;/?:@&= $,#)는 하나 이상의 16진수 이스케이프 시퀀스로 대체됩니다. URI 구성 요소에 ? 및 #과 같은 구분 기호가 포함되어 있으면 encodeURIComponent() 메서드를 사용하여 각 구성 요소를 별도로 인코딩해야 하며, 그렇지 않으면 encodeURI(URIstring) 함수를 사용하여 인코딩할 수 있습니다.

<code><span>var</span> content = UM.getEditor(<span>'myEditor'</span>).getAllHtml();
<span>/*对待传递的值的内容进行编码*/</span><span>var</span> htmlcontent = <span>encodeURIComponent</span>(content);
alert(htmlcontent);
<span>var</span> postStr = <span>'news_title='</span> + news_title +<span>'&htmlc/span> + htmlcontent + <span>'&sid='</span>+<span>Math</span>.random();
alert(postStr);
ajax(<span>"../news_submit_hand.php"</span>,postStr,<span><span>function</span><span>(result)</span>{</span><span>if</span>(result == <span>'submit_success'</span>){
        alert(<span>"新闻提交成功!请通过右上角的关闭按钮来关闭编辑器。"</span>);          
    }
    <span>else</span> {
        alert(<span>"新闻提交出错!"</span>);            
    }      
});</span></code>
로그인 후 복사

인코딩 후에도 해결해야 할 문제

?? 뉴스 제출 시 제목을 HTML 텍스트 콘텐츠 본문 앞에 삽입하려면 뒤에 제목을 삽입해야 합니다. 이때 인코딩 후

가 됩니다. 해결책이 있습니다:
??먼저 문자열을 통해 원래 문자열을 지정된 위치에서 두 개의 문자열로 분할한 다음, 분할된 문자열의 전반부를 문자열의 후반부에 삽입하여 새로운 문자열을 형성하는 함수입니다.
구현되었습니다. ??코드 구현:
<code><span><span>function</span><span>str_insert</span><span>(<span>$str</span>, <span>$i</span>, <span>$substr</span>)</span>
{</span><span>for</span>(<span>$j</span>=<span>0</span>; <span>$j</span><<span>$i</span>; <span>$j</span>++){
     <span>$startstr</span> .= <span>$str</span>[<span>$j</span>];
}
<span>for</span> (<span>$j</span>; <span>$j</span><strlen(<span>$str</span>); <span>$j</span>++){
    <span>$laststr</span> .= <span>$str</span>[<span>$j</span>];
}
    <span>$str</span> = (<span>$startstr</span> . <span>$substr</span> . <span>$laststr</span>);
    <span>return</span><span>$str</span>;
} 


<span>$myfile</span> = fopen(<span>$news_path</span>, <span>"w"</span>);
<span>if</span>(<span>'FALSE'</span> == <span>$myfile</span>)<span>echo</span><span>'error'</span>;
<span>/*处理新闻标题等信息*/</span><span>//待插入的html代码</span><span>$insert_html</span> = <span>"<div><h3 style=\"text-align:center;\">". <span>$news_title</span> . <span>"</h3><div style=\"text-align:center;width:100%;font-size:8px;color:#A9A9A9;\"><span>发布者:admin</span>  <span>发布日期:"</span>. date(<span>"Y-m-d H:i:s"</span>,<span>$timestamp</span>) .<span>"</span></div></div><hr style=\"border:1px dashed #000; height:1px\">"</span>;

<span>$first_pos</span> = stripos(<span>$htmlcontent</span>, <span>"%3Cbody%20%3E"</span>);
<span>$first_pos</span> += <span>13</span>;
<span>$content</span> =str_insert(<span>$htmlcontent</span>,<span>$first_pos</span>,<span>$insert_html</span>);

fwrite(<span>$myfile</span>, <span>$content</span>);
fclose(<span>$myfile</span>);</code>
로그인 후 복사

저작권 표시: 이 글은 블로거의 [원본] 글이며, 블로거의 허락 없이 복제될 수 있습니다. 블로그: [http:// blog.csdn.net/FreeApe]

위 내용은 제출된 페이지 데이터 손실 또는 콘텐츠를 포함한 잘못된 콘텐츠에 POST 값(html 태그 포함)을 전달하는 PHP---ajax를 소개합니다. PHP 튜토리얼에 관심이 있는 친구에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿