ホームページ  >  記事  >  バックエンド開発  >  PHP --- ajax が POST 値 (html タグを含む) を送信ページに渡し、データが失われるか文字化けする

PHP --- ajax が POST 値 (html タグを含む) を送信ページに渡し、データが失われるか文字化けする

WBOY
WBOYオリジナル
2016-07-29 09:15:171800ブラウズ

質問

?? テキスト エディターでコンテンツ (HTML テキスト) を取得し、Ajax を使用してそのテキスト コンテンツを POST 経由でバックグラウンドに渡し、それを xxx.html ファイルとして保存しますが、このファイルをブラウザによりデータの損失またはデータ化けが発生します。

理由

?? これは、テキストにHTMLタグが含まれているため、POSTを使用して値を転送する場合、値の内容に「&」などの一部の文字が影響し、文字化けやデータ化が発生します。損失。

解決策

?? 渡すHTMLテキストの内容をエンコードして渡します。次に、ブラウザの自動デコードを使用します。

エンコード関数

??encodeURIComponent() 関数は、文字列を URI コンポーネントとしてエンコードできます。このメソッドは、ASCII 文字と数字、および ASCII 句読点文字 - _ ~ * ' ( ) をエンコードしません。
他の文字 (;/?:@&=+$,# など、URI コンポーネントを区切るために使用される句読点) は、1 つ以上の 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 テキスト コンテンツの本文の前にタイトルを挿入するには、マークの後にタイトルを挿入する必要があります。このときエンコード後は%3Cbody%3Eとなります。解決策はあります:
??元の文字列を指定位置から%3Cbody%3E文字列までで2つの文字列に分割し、分割した文字列の前半+挿入する文字列+文字列の後半を結合して新しい文字列を形成します。これにより、関数が実現されます
??コード実装:

<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]

上記は、データが失われたり文字化けした場合に、PHP --- ajax が送信ページに POST 値 (html タグを含む) を転送する方法を内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。