作成日:2018-02-21, 更新日:2021-04-14
やりたいこと
・HTMLのscriptタグの中で使われている「<」を「<」に変換したい。
「preg_replace_callback()」でいけそうな気がしたんだけど、未熟者なので挫折した。
代案として、マッチする箇所すべて抜き出して置き換える。
▼流れ
・scriptタグをマルっと取得
・中身に「<」を含むscriptタグをマルっと取得
・scriptタグの中身があれば中身を置き換え
・中身を置き換えたscriptタグを元に戻す
▼修正済み
$source = 〇〇〇;
$regex = '/<script[^>]*?>([^<]*<[^\/][\s\S]*?)<\/script>/ui';
preg_match_all($regex, $source, $m, PREG_SET_ORDER);
foreach ( $m as $rowM ) {
$tmpScript = str_replace($rowM[1], str_replace('<', '<', $rowM[1]), $rowM[0]);
$source = str_replace($rowM[0], $tmpScript, $source);
}
▼没:2018/02/21
$source = 〇〇〇;
$regex = '/<script[^>]*?>([\s\S]*?)<\/script>/ui';
preg_match_all($regex, $source, $m, PREG_SET_ORDER);
foreach ( $m as $rowM ) {
if ( $rowM[1] != '' ) {
$tmpScript = str_replace($rowM[1], str_replace('<', '<', $rowM[1]), $rowM[0]);
$source = str_replace($rowM[0], $tmpScript, $source);
}
}
メモ
$tmpScript = str_replace($rowM[1], str_replace('<', '<', $rowM[1]), $rowM[0])
▼バラした状態
$out = $rowM[0]; // タグ自体
$in = $rowM[1]; // タグの中身
// タグの中身を置き換え
$replace = str_replace('<', '<', $in);
// タグ自体からタグの中身をまるっと差し替え
$tmpScript = str_replace($in, $replace, $out);
$source = str_replace($rowM[0], $tmpScript, $source)
「全体」から「対象のタグ」を「中身を差し替えたタグ」で差し替え