2016-09-16 2 views
0

이것은 아마도 어리석은 일이지만, 텍사 레아에서 PHP로 MySQL에 콘텐츠를 저장하려고합니다. 일반적으로 개행은 데이터베이스에 보존됩니다. 그러나 갑자기 그들은 제거됩니다. PHP가 개행 문자로 textarea에서 콘텐츠 저장

나는 아약스와 PHP로 값을 보낼 jQuery를 사용하고 난 PHP에서 다음을 수행하십시오.

$var = strip_tags($_POST["var"]); 
$db->query("UPDATE table SET var='$var' WHERE id=$id") 
어떻게 든

줄 바꿈이의 길에 손실 나는 VAR에 nl2br을 할 경우, 그들은 은 <br/>으로 변환되므로 쿼리를 실행할 때까지 $ var에 개행이 포함됩니다.

업데이트를 추가하면 낯선 것을 추가 할 수 있습니다. 실제로 $ var에 nl2br을 실행 한 다음 테이블을 업데이트하기 전에 br 태그를 개행 문자로 바꾸면 모두 잘되고 있습니다.

은 잘 작동 :

$var = strip_tags($_POST["var"]); 
$var = nl2br($var);  
$var = preg_replace('#<br\s*/?>#i', "\n", $var); 
$db->query("UPDATE table SET var='$var' WHERE id=$id"); 
+0

당신을 수행합니다. http://php.net/manual/en/mysqli.real-escape-string.php

는 의미 제거 된 다음 데이터베이스 자체에 줄 바꿈이 있습니까? 렌더링 측에서 nl2br을 사용해야 할 수도 있습니다. –

+0

$ var = nl2br like strip_tags ($ _POST [ "var"])); –

+0

아니요 데이터베이스에 줄 바꿈이 표시되지 않습니다. 렌더링면에서 nl2br을 실행하면
-s가 표시됩니다. – johnohod

답변

0

저는 Zebra (이번에는 소스 코드)에 대해 다른 시각을 가지고 있으며, 이전의 주석에서 언급했듯이 이것은 정확하게 개행이 제거되는 이유입니다. 얼룩말 패키지에서 탈출 방법을 사용 NUL (ASCII 0), \ n, \ r에, \, ', ", 및 제어-Z

0

당신은에 입력을 추가 할 수 있습니다 :

<pre></pre> 

이 데이터베이스에 미리 포맷 텍스트로 입력 내용을 저장합니다.

참조 : https://www.w3.org/wiki/HTML/Elements/pre

nl2br은 당신이 선호하는 중 너무 좋은 솔루션을 사용하는 것입니다. 데이터베이스 열에 올바른 구성을 사용하고 있는지 확인하십시오. VARCHAR 또는 TEXT 여야합니다.

+0

그건 문제를 해결하지 못합니다. 내 문제는 저장할 때 \ n 제거됩니다. 텍스트와 함께 html을 저장하고 싶지 않습니다. – johnohod

0

제 생각에 문제는 줄 바꿈이 서버에 전달되기 전에 제거된다는 것입니다.

jQuery와 함께 보내지는 것을 언급 했으므로 서버로 보내기 전에 클라이언트 쪽 처리가 없는지 확인하십시오.

INSERT INTO mytable (myfield) VALUES ('hi this is some text 
and this is a linefeed. 
and another'); 

난 그냥 하나에 모든 SQL 문을 가지고하는 것이 바람직했다 상황을했다 : 여러 줄에 걸쳐 확산되는 SQL 명령을 사용하여 OK 경우

+0

이상한 점은 쿼리를 실행하기 전에 nl2br ($ var)을 수행하면
태그가 발생한다는 것입니다. 그래서 실제로 쿼리를 실행할 때 개행 문자가 제거되는지 궁금합니다. 나는 Zebra_database wrapper를 사용한다. 만약 내가 예. PhpMyAdmin에 들어가서 텍스트를 편집하면 개행 문자가 보존됩니다. 따라서 데이터베이스 나 데이터 유형에는 아무런 문제가 없습니다. – johnohod

+0

Zebra 문서를 빠르게 살펴 봤는데 update() 메서드가 escape()를 호출하는 것으로 보입니다. "SQL 삽입을 방지하기 위해 SQL 문에서 사용할 문자열의 특수 문자를 이스케이프 처리합니다. 이 방법은 또한 주어진 문자열을 작은 따옴표로 둘러 쌉니다! " http://stefangabos.ro/wp-content/docs/Zebra_Database/Zebra_Database/Zebra_Database.html#methodescape 그래서 새 줄이 제거됩니다. –

+0

아하, 나는 이것이 문제가 될 것 같은 느낌이 들었다. 나는 얼마 전 Zebra_database로 전환했다. 나는 그 때 linebreaks를 보전하는 제일 연습이인지 생각해 보는가? – johnohod

0

후 오오의 제안은 가장 쉬운 방법입니다 그래서 CONCAT_WS()와 CHAR() 조합이 저에게 효과적이라는 것을 알았습니다.

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another')); 
+0

게시물을 읽어보십시오. 문제점을 표시하는 데 문제가 없습니다. \ n 문제는 데이터베이스에 \ n 저장하는 것과 관련됩니다. – johnohod

+0

오해 때문에 죄송합니다. 위의 해결 방법을 확인하십시오. –

관련 문제