PHP 5.3 を実行し、マジック クォートをオンにしたサーバーがあります。
magic_quotes_gpc オン オン
magic_quotes_runtime オフ オフ
サニタイズされていない (要素ペイロードに引用符、&、<、> がある) XML を含む POST (CONTENT_TYPE: application/x-www-form-urlencoded) を受け取ると、SimpleXML はそれを解析できません。
生の $_POST ダンプを見ると、XML は最初の不正な文字から切り捨てられています。これは前に見たことがない。
次に、htmlspecialchars を追加したところ、問題なく動作し、SimpleXML で XML を解析できるようになりました。
$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));
これは、違法ではありますが完全な XML が実際に $_POST 配列にあることを示唆していますが、それを見ようとすると切り捨てられます。
$_POST の値を電子メールで送信し、それをデータベース化していますが、どちらの場合も $_POST の値は切り捨てられています。
$_POST 値を取得する方法は次のとおりです
if(isset($_POST)){
foreach($_POST as $k=>$v){
if(preg_match('/^\<\?xml/',trim($v))){
$postXMLPayload = $v;
break;
}
}
}
誰かがこれを説明できますか?
ありがとう