2014-05-13 7 views
0

텍스트 단락 속성 (또는 이와 비슷한)을 사용하여 각 단락의 첫 줄 들여 쓰기를 추가하고 싶습니다.사용자 서식이 지정된 텍스트의 텍스트 들여 쓰기

먼저 사용자는 텍스트 영역에 텍스트를 작성한 다음 DB에 저장할 수 있습니다. 나는이 텍스트를 표시 할 때

내가 사용 :

$exhib = $res->fetch_array(); 
echo "<div class='infoContent'>". nl2br($exhib['description']) . "</p></div>"; 

사용자의 라인 수익률은 DB에서 \n로 저장하고, nl2br에 의해 <br />로 수정됩니다. 내 CSS의 경우 :

.infoContent 
{ 
    text-indent: 10px; 
} 

첫 번째 줄만 들여 쓰게됩니다. (정상적인 동작).

: <br /> 태그 뒤에 각 줄마다 자동 들여 쓰기를 수행하려면 어떻게해야합니까?

추한 해결책을 시도했지만 공백 단락 부분 <p></p>이 다른 줄 반환을 만들지 않기 때문에 작동하지 않습니다 (사용자가 2 줄을 입력하는 경우 \ n \ n).

echo "<div class='infoContent'><p>" . str_replace("<br />", "</p><p>", nl2br($exhib['description'])) . "</p></div>"; 
내가 <br /><p></p> 태그를 대체 할 수 있지만,이 매우 나쁜 해결책이 될 것으로 보인다

...

편집 : JSfiddle

감사

+0

빈 문단에 약간의 공백을 넣으려면 '최소 높이'를 사용해보세요. – Oriol

+0

두 단락의 결과를 보여 주시겠습니까? – ntgCleaner

+0

php로 양식을 제출할 때마다 '\ n'에 사용자 정의 문자열을 분할하고 그 뒤에'  '네 개를 추가 한 다음 다시 문자열을 넣으시겠습니까? – ntgCleaner

답변

2

\n\nhttp://www.w3schools.com/php/func_string_str_replace.asp 보통 새로운 단락 (입력)을 의미한다. 단락 사이의 공백은 CSS이며 실제로 기본 브라우저 스타일입니다 (1em라고 생각하십니까?). \n<br> (shift + enter)입니다.

그래서 nl2br()를 사용하고 스스로를하지 않는다 : 정확히 마크 다운에서 1 줄 바꿈 = BR (:

$text = '<p>' . htmlspecialchars($text) . '</p>'; // HTML ENCODE! 
$text = preg_replace('#\n\n\n*#', '</p><p>', $text); // 2 or more \n 
$text = preg_replace('#\n#', '<br />', $text); // all left-over \n 
$text = preg_replace('#><#', ">\n<", $text); // if you like </p>\n<p> with a newline between, like I do 

http://3v4l.org/b0AhL

이는 (섬유 및 그와) 거의 마크 다운이하는 일입니다)과 2 개의 뉴 라인 = P. 나는 평범한 텍스트를 렌더링 할 때 항상 간단한 Markdown을 사용한다.

+0

이것은 더 나은 해결책입니다! '\ n \ n'을 더 고려해야 만할까요? – ntgCleaner

+0

네, 맞아요. 2 개 이상의'\ n'도 1 개의 새로운 P입니다. 응답이 업데이트되었습니다. – Rudie

+0

작동합니다. 고마워요! nl2br 문서에 일치 시키려면 패턴은'preg_replace ("# \ n \ n \ n * | \ r \ r \ r * | \ n \ r \ n \ r ..." (탐색기? charset?) BTW min-height는 빈 단락에 대해 작동합니다. – Marcassin

1

제출 귀하의 텍스트 영역, 첫 번째 줄만 들여 쓰기 CSS를 사용하는 대신를 사용할 수 있습니다(비 분리 공간). 당신이 당신의 텍스트 영역을 제출할 때

, 난 당신과 같은 그것을 잡아 가정 : 당신이 당신의 데이터베이스에 제출하기 전에

$userText = $_POST['description'] 

글쎄, 당신은 간단한 대체 사용할 수 있습니다 - 텍스트를 잡아 후 :

$userText = str_replace("\n", "\n &nbsp;&nbsp;&nbsp;&nbsp;", $userText); 

그런 다음 데이터베이스에 제출하십시오. 다시 돌아 오면 nl2br은 여전히 ​​\n<br />으로 만든 다음 &nbsp;을 볼 수 없지만 HTML에서는 4 개의 공백 (들여 쓰기)이 표시됩니다.

더럽지 만 간단합니다!

는 참조 :

관련 문제