关于php输出html转义js代码不能执行问题

我把< s c r i p t>alert('123123')</ s c r i p t>转义成&#60&#115&#99&#114&#105&#112&#116&#62&#97&#108&#101&#114&#116&#40&#39&#49&#50&#51&#39&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62

然后如下代码
<?php
$abc='&#60&#115&#99&#114&#105&#112&#116&#62&#97&#108&#101&#114&#116&#40&#39&#49&#50&#51&#39&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62';
echo $abc;

?>
这里只是输出显示
< s c r i p t>alert('123')</ s c r i p t>
却没有执行

但是如果改成
<?php
$abc="< s c r i p t>alert('123123')</ s c r i p t>";
echo $abc;

?>
却能弹出框123,为什么呢

尖括号, 下划线等特殊字符会自动进行转义, 但&#开头的字符就是说就要指定输出那个字符

可以用htmlspecialchars()函数,

<?php
$abc="<script>alert('123')</script>";
echo htmlspecialchars($abc);
?>