2012-08-22 4 views
0

내 UI에 텍스트 영역이 있으며 preg_replace를 사용하여 사용자가 입력 한 모든 xml (html 포함) 텍스트를 필터링하고 싶습니다. 나는 그것에 대한 도움이 필요하다.PHP Preg가 모든 XML을 제거하기 위해 바꿉니다.

예 :

Emailed user sam at 12:15 PM 
<details><email>[email protected]</email></details> 

preg_replace이다 후 : 좋은 것 정규식을 preg_replace이다이 모든 포인터와 함께

Emailed user sam at 12:15 PM 

. preg_replace에서 java 정규 표현식 (PHP를 처음 사용하는)을 사용해 보았는데 작동하지 않는다는 것을 알았습니다. 내 정규 표현식이 잘못되었거나 preg_replace가 다른 종류의 정규 표현식을 사용하는지 확실하지 않습니다.

귀하의 모든 도움을 많이 받으실 수 있습니다. '/<[\/]{0,1}\w[^>]*>/g'이 정규식 < 이름 물건 > 및 </이름 물건 >입니다 경우

+0

지금까지 시도한 것을 보여주세요. –

+0

무엇을할까요? 'strip_tags()'에 문제가 있습니까? –

+0

XML 태그를 필터링하지 않습니다 – raidenace

답변

0

mixed preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]])

따라서 다음과 같은 대부분의 경우에

$str_out = preg_repace('/<[\/]{0,1}\w[^>]*>/g', '', $str_in); 

을 작동합니다. 당신이 속성에 >을했다면 그것은 실패합니다 (즉, <name blah=">hello">은 기본입니다 hello">

strip_tags 만 발생합니다 너무 빨라집니다 strip_tags


EDIT를 제거하지 에 일이에 대한 인수를 기억하십시오. : 태그 사이의 내용도 제거하려면 해당 정규 표현식은 '/<\w[^>]*>[\s\S]*?<\/\w[^>]*>/g'이지만 더 많은 상황 (즉, 닫힌 태그/중첩 태그)에서 오류가 발생하므로 먼저 실행하고 결과에 대해 위의 태그를 실행하는 것이 좋습니다

+0

만약 사람들이 나쁜 것을 제출하지 않는다면, while 루프에서 이것을 수행하여 변경을 멈추고 사람들이 문자열의 제거 된 비트가 새로운 태그를 만들 것을 기대하는 이상한 일을하지 않게하십시오. 즉 < mytag> –

관련 문제