これが一例です。
$allowedPart = "<a href='http://alink.com'></a>";
$unsafePart = "<h1>A title</h1>";
$unsafePart .= "<script>alert('a script!!!');</script>";
$unsafeString = $allowedPart . $unsafePart;
$allowed = array("a"=>array(
"href"=>array()
));
$sanitizedString = wp_kses($unsafeString, $allowed);
$sanitizedString
は$allowedPart
と等しくなければなりませんが、何か問題があり、$sanitizedString
は$unsafeString
と同じままです。
どうしましたか?
=========================
すみません、データベースに保存した後、私はlocation.reload()
をしました、そしてその結果textareaで元の内容を維持しました、しかしデータベースでは値はほとんど正しいです。この二次問題は、以下を使用して解決されました。
window.location.href = window.location.href;
しかし、問題があります、 'href'も消えます、なぜですか?
例えば
<a href='http://alink.com'>Link</a>
は<a>Link</a>
になります
$allowed = array( 'img'=>array( 'src'=>array(), ));
のようなものを試してみてください
<img src='img.png' />
は<img />
になります
Wp_kses()が(hrefやsrcのような)サブ配列内のすべての属性を許可されていないものとして認識し、それらとその内容をフィルタリングしているかのようです。
=========================
単一引用符の代わりに二重引用符を使用すると解決するようです。
$allowed = array( 'img'=>array( 'src'=>array(), ));
<img src="img.png" />
wp_kses
( Codex )は許可されていないタグを削除しますが、その内容は削除されません。そのため、 "{something}"がある場合、wp_kses
はタグではなくコンテンツのみを削除し、 "{something}"を返します。したがって、これは意図的な動作であり、あなたの問題はバグではないようです。