2015-01-31 9 views
1

문자열 (텍스트 파일에서 추출)을 필터링하고 preg_replace를 사용하여 all 및 태그를 제거합니다. 어떤 이유로 든 실제 텍스트 "스크립트"를 제거하지만 <> 및을 남겨두고 있습니다. 나는/< (리터럴로 취급하려고 시도)에서 하위 코드를 시도했지만 오류가 발생합니다. 괄호를 제거하려면 어떻게해야합니까?preg_replace를 사용하여 <script> 태그 제거

$file = file_get_contents($directory . "original-" . $name); 
$file = htmlentities($file); 
$file = preg_replace('<script>', '', $file); 
$file = preg_replace('<\script>', '', $file); 

그리고 여기에 출력됩니다 :

<>TEXT</> 
+2

delimeter와 escapes가 누락되어 있습니다. 'htmlentities'이 문자열을 변경하고 있습니다. 예상 한 내용이 포함되어 있지 않을 수도 있습니다. – Rangad

+0

어떻게 표시해야합니까? 정말 새로운 정규 표현식. – mattegener

+0

@mattegener 스크립트 태그를 대체 한 후에'htmlentities' 행을 삽입하십시오. 또한 슬래시'/'not \ backslash –

답변

3

대답은

$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html); 

이다 그러나 당신이 strip_tags를 보라 할 수 있습니다 입력은 <script>Text</script> 여기에 코드입니다입니다 함수

+0

이것이 이유 일 뿐이며 간단히 대답합니다. 대답은 입니다. 당신은 * 왜 * 대답인지 설명하지 않습니다. –

+2

1. 왜냐하면이 웹 사이트에서는 백만 번에 이르는 것으로 설명되어 왔고이 질문은 격일로 다가옵니다. 2. 이것은 정규 표현식으로 해결되지 않을 가능성이 높습니다. 대신 strip_tags를 사용해야합니다. – FeedTheWeb

+0

''PHP는 다중 구분 기호와 문자를 지원한다 ''는 단 하나의 줄은 < >이다. 당신은 죽지 않을 것이고 당신은 더 나은 대답을 갖게 될 것입니다. –

2

에서 사용하는 패턴함수에는 그 전후에 어떤 종류의 delimiter이 있어야합니다. PHP는 많은 다른 구분자를 허용하기 때문에 꺽쇠 괄호를 정규식 구분 기호로 취급하고 패턴의 일부는 취급하지 않습니다. 대개 구분자로 {}을 사용하고 많은 다른 사람들은 슬래시, 해시 기호, 대괄호, 괄호를 사용합니다. 꺾쇠 괄호는 구분 기호로 사용할 수도 있으므로 패턴이 실패하는 이유입니다.

당신은

$file = preg_replace('/<script>/', '', $file); 

또한, 그래서 당신의 패턴이 <SCRIPT> 또는 <Script>을 말한다 태그에 의해 좌절되고, PHP 정규 표현식은 대소 문자를 구분 참고 : 당신의 패턴 주위에 어떤 구분 기호를 추가하여 예컨대을이 문제를 해결할 수 있습니다. 패턴 뒤 (닫는 구분 기호 뒤)의 imodifier은 대소 문자를 구분하지 않습니다 (/<script>/i). 당신이, 내가 반복하지 말아야하는 (!) 참고에

<script type="text/javascript">...</script> 
<script src="..." /> 

, 그리고 어쩌면 내가 당신의 질문에 너무 많이 읽고 있어요 : 또한, 여전히 브라우저에 의해 해석되는 HTML 태그를 작성하는 방법에는 여러 가지가 예를 들어,가 , not use regexps to parse HTML, and especially to sanitize it.

+0

코드 예제가 없으면 사용자의 대답이 매우 완전하지 않습니다. 그러나 나는 마지막 줄에 동의한다. 완전히! –

0

$ html = preg_replace ('# (. *?) # is', '', $ html);