2017-10-06 1 views
0

나는 사용자가 텍스트 및 태그를 입력 exmaple에 대한 MySQL의에 저장 할 수있는 텍스트 영역을 내가 사용PHP와 MySQL, nl2br 및 유효성 검사 오류

nl2br($text); 

줄 바꿈이 추가됩니다 태그를 포함하는 모든 라인의 끝에서 :

This is some text<br/> 
<table><br/> 
<tr><br/> 
<td><br/> 
    blah<br/> 
    blah<br/> 
    blah<br/> 
</td><br/> 
</tr><br/> 
<table><br/> 

는 분명 내가 때문에 여기에 예를 들어 태그 사이에 줄 바꿈의 유효성 검사 오류를 얻을 :

<tr><br/> 
<td><br/> 

내가 사용하지 않는 nl2br 더 줄 바꿈이 전혀 존재하지 않습니다. 나는 무엇을해야합니까?

+1

HTML에'br'이 없으면 출력에'br'이 없어야합니까? – Jite

+1

@ Jite에 동의하지만, 질문을 위해서, 어쩌면 당신은 pre 태그에 넣으려고 할 수 있습니까? – Nebulosar

+0

pre는 pre 내부에 테이블이 허용되지 않으므로 유효성 검사 오류를 발생시킵니다. 당신이 텍스트가 아닌 테이블에 넣는 것이 아니라면. – agahi

답변

2

nl2br을 통과 한 태그 다음에 설정된 br 태그는 항상 제거 할 수 있습니다.

이 하나의 라이너가 도움이 될 수 있습니다.

<?php 

$stringToStore = str_replace('><br />', '>', nl2br($originalString)); 

희망이 있습니다.


EDIT : 테스트되지 않았지만 더 나은 html 태그를 잡기 위해 정규 표현식을 사용할 수 있습니다.

<?php 

$stringToStore = preg_replace('/(<.*>)<br\s*\\/?>/', '$1', nl2br($originalString)); 

정규식은 기본적으로 말한다 :

    <.*> 주위에 <br />
  • 괄호 다음에 < >의 내부
  • Caputure의 모든 (우리가 $ (1)를 사용하여 액세스 할 수있는 캡처 그룹을 의미 그것 때문에 첫 번째 caputre 그룹)
  • 태그 다음에 <br />을 붙잡고 catch 태그를 사용하십시오.
  • 이 받아 들일 것 중 하나 안된하지만 작동해야이 <br />, <br/> 또는

내가 말처럼 <br>.