_(//<![CDATA[ , //]]>
_)ブロックを削除するにはどうすればよいですか。 script
要素内のタグ。
_<script type="text/javascript">
//<![CDATA[
var l=new Array();
..........................
..........................
//]]>
</script>
_
preg_replace()
で実行できるように見えますが、私に役立つ解決策が見つかりませんでした。
どの正規表現を使用しますか?
次の正規表現はそれを行います...
$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/',
'$1',
$scriptText);
CodePad 。
静的文字列には正規表現は必要ありません。
テキストのこれらの部分を何も置き換えないでください。
$string = str_replace("//<![CDATA[","",$string);
$string = str_replace("//]]>","",$string);
あなたがしなければならない場合...
$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s);
これにより、囲まれたコードのインデントを台無しにすることなく、各タグを含む行全体が削除されます。
試すこともできます、
$s=str_replace(array("//<![CDATA[","//]]>"),"",$s);
str_replace()
の代わりにpreg_replace()
を使用する方がはるかに簡単です
$var = str_replace('<![CDATA[', '', $var);
$var = str_replace(']]','',$var);
echo $var;
私はこのように<![CDATA[]]
を削除しますが、1行で機能するようになり、複数行の文字列であるかどうかわかりません。
preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas);
$string_result_after_this = $datas[1][0];
<![CDATA[
にhtml特殊文字が含まれている場合(例: &
、"
、'
、<
、>
であり、文字列の残りの部分はまだXMLであるため、これらの文字をエスケープする必要があります。 。そうしないと、XMLが無効になります。
function removeCDataFromString(string $string)
{
return preg_replace_callback(
'~<!\[CDATA\[(.*)\]\]>~',
function (array $matches) {
return htmlspecialchars($matches[1], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
},
$string
);
}
$nodeText = '<![CDATA[some text]]>';
$text = removeCdataFormat($nodeText);
public function removeCdataFormat($nodeText)
{
$regex_replace = array('','');
$regex_patterns = array(
'/<!\[CDATA\[/',
'/\]\]>/'
);
return trim(preg_replace($regex_patterns, $regex_replace, $nodeText));
}