web-dev-qa-db-ja.com

`// <![CDATA [`を削除して `//]]>`を終了するにはどうすればよいですか?

_(//<![CDATA[ , //]]>_)ブロックを削除するにはどうすればよいですか。 script要素内のタグ。

_<script type="text/javascript">
    //<![CDATA[
    var l=new Array();
    ..........................
    ..........................
    //]]>
</script>
_

preg_replace()で実行できるように見えますが、私に役立つ解決策が見つかりませんでした。

どの正規表現を使用しますか?

13
bomanden

次の正規表現はそれを行います...

$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/', 
                        '$1', 
                        $scriptText);

CodePad

12
alex

静的文字列には正規表現は必要ありません。

テキストのこれらの部分を何も置き換えないでください。

$string = str_replace("//<![CDATA[","",$string);
$string = str_replace("//]]>","",$string);
19
Dimme

あなたがしなければならない場合...

$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s);

これにより、囲まれたコードのインデントを台無しにすることなく、各タグを含む行全体が削除されます。

6
Alan Moore

試すこともできます、

$s=str_replace(array("//<![CDATA[","//]]>"),"",$s);
2
Rohan Kumar

str_replace()の代わりにpreg_replace()を使用する方がはるかに簡単です

$var = str_replace('<![CDATA[', '', $var);
$var = str_replace(']]','',$var);
echo $var;
0
Siddharth

私はこのように<![CDATA[]]を削除しますが、1行で機能するようになり、複数行の文字列であるかどうかわかりません。

preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas); 
$string_result_after_this = $datas[1][0];
0
Fathur Rohim

<![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
    );
}
0
pulzarraider
$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));
}
0
duttyman