programing

PHP로 \r\n 바꾸기

newsource 2023. 7. 24. 22:32

PHP로 \r\n 바꾸기

나는 MySQL 데이터베이스에 내 텍스트를 삽입하는 게시물 양식을 가지고 있습니다.

사용합니다

$post_text = mysql_real_escape_string(htmlspecialchars($_POST['text']));

그리고 그것을 대체하고 싶습니다.\r\n자동으로 추가되었습니다.

나는 노력했다.

$text = str_replace('\\r\\n','', $text);
$text = str_replace('\r\n','', $text);
$text = str_replace('\\R\\N','', $text);
$text = str_replace('\R\N','', $text);
$text = str_replace('/\r\\n','', $text);
$text = str_replace('/r/n','', $text);
$text = str_replace('/\R\\N','', $text);
$text = str_replace('/R/N','', $text);

그렇지만\r\n항상 데이터베이스 항목에 포함됩니다.

이걸 어떻게 고칠 수 있을까요?

큰 는 두 가지 의 문제라는 것입니다.\n그리고.\r이스케이프 문자는 이중 문자열에서 사용할 때만 이스케이프됩니다.

PHP에서, 사이에는 큰 차이가 있습니다.'\r\n'그리고."\r\n"첫 번째는 단일 따옴표이고 두 번째는 이중 따옴표입니다.

그래서:'\r\n' 슬래시, '되는 반면, 슬시, 'r', 다른개및 'n', 시슬는 4의이는문반생 4면되열성,"\r\n"새 줄 및 캐리지 리턴 문자인 두 개의 문자가 포함됩니다.

따라서 질문에 대한 직접적인 대답은 질문에서 제시한 두 번째 예를 사용해야 하지만 단일 따옴표 대신 큰따옴표를 사용해야 한다는 것입니다.

$text = str_replace("\r\n",'', $text);

이렇게 하면 입력에서 모든 새 줄이 제거되고 아무것도 없는 줄로 대체된다는 점을 지적할 가치가 있습니다.입력에 두 개 이상의 새 줄이 있으면 해당 줄이 모두 제거됩니다.귀하의 애플리케이션에 대해 자세히 알지 못하더라도, 이것이 귀하가 원하는 것인지는 모르겠지만, 다음과 같은 몇 가지 생각이 있습니다.

  • 입력 문자열 에서 빈 줄(및 기타 공백)만 제거하려면 다음을 사용할 수 있습니다.trim()대신 기능합니다.

  • 형식을 유지합니다.nl2br()기능이 도움이 될 것입니다.서식을 지정하지 않고 HTML로 출력하려는 경우 브라우저가 \n자로 줄 바꿈을 렌더링하지 않으므로 제거할 필요가 없을 수 있습니다.

  • 예와 같이 새 줄을 아무것도 없는 상태로 바꾸면 첫 번째 줄의 마지막 단어가 두 번째 줄의 첫 번째 단어로 바로 이동합니다.공백 문자 대신 공백 문자로 대체하는 것이 좋습니다.

  • 을 사자가입제수있항다같습다니음과목은용는만 제출할 수 .\n하는 이없는 \r또는 그 반대의 경우(OS나 브라우저, 의도적인 해킹 또는 기타 여러 가지 이유 때문일 수 있음).이 두 문자의 인스턴스를 모두 바꾸려면 서로 옆에 있는 것에 의존하지 않고 개별적으로 바꾸는 것이 더 안정적인 방법입니다.str_replace()에서는 이들을 배열로 지정하여 이 작업을 참조하십시오.사용할 수도 있습니다.strtr()또는preg_replace()같은 목표를 달성하기 위해.

시도해 보세요

$text = str_ireplace(array("\r","\n",'\r','\n'),'', $text);
   if (!is_numeric($value)) {
        $value = mysql_real_escape_string(trim($value));
        $value = str_replace("\\r\\n",'', $value);
    }

데이터베이스 항목을 처리할 때 여러 개의 대체 항목에 sttr()을 사용할 것을 제안합니다.또한 @Spudley가 제안한 것처럼 큰따옴표를 사용합니다.

$text = strtr($text, array(
          "\r\n" => "",
          "\r" => "",
          "\n" => "",
          "\t" => " "));

sttr() -> 하위 문자열이 교체되면 새 값이 다시 검색되지 않습니다.

http://php.net/strtr

str_replace() -> 검색이 배열이고 replace가 문자열인 경우 이 대체 문자열은 모든 검색 값에 사용됩니다.하지만 그 반대는 말이 되지 않을 것입니다.

http://php.net/str_replace

여러 줄 바꿈을 유지하기 위해 다음 작업을 수행합니다.

$tempCONTENT = mysqli_real_escape_string($con, $_POST['promotion_content']);
$tempCONTENT = str_ireplace(array("\r\n","\r","\n",'\r','\n'),'<br />', $tempCONTENT);
$previewFORMATTED = str_ireplace(array('<br /><br />'),'<br />', $tempCONTENT);
echo $previewFORMATTED;

텍스트 영역 양식 필드를 처리하는 데 사용됩니다.사용자 입력을 \r\n에서 [br /]로 변경하여 줄 바꿈 횟수를 유지합니다.

데이터베이스에 추가하기 전에 사용자가 확인할 수 있도록 입력을 표시하는 데 사용합니다.두 개의 제출 버튼을 사용하는 것은, 하나는 확인할 것이고 다른 하나는 제출할 것인데, 이것은 그렇게 하지 않습니다.mysqli_real_escape_string을 사용하여 데이터를 추가합니다.

그런 다음 str_replace를 사용하여 올바른 [br /] 수를 다시 \r\n으로 변환하여 결과를 텍스트 영역에 다시 반영하여 편집하기 쉽게 합니다.

제 최종 코드는 다음과 같습니다.

$tempCONTENT = mysqli_real_escape_string($con, $_POST['promotion_content']);
$tempCONTENT = str_ireplace(array("\r\n","\r","\n",'\r','\n'),'<br />', $tempCONTENT);
$previewFORMATTED = str_ireplace(array('<br /><br />'),'<br />', $tempCONTENT);
echo $previewFORMATTED;
$formOUTPUT = str_ireplace(array('<br />'),"\r\n", $previewFORMATTED);

저는 이것을 사파리와 크롬에서 테스트해 보았는데 잘 작동합니다.IE를 테스트해 본 적은 없지만 IE에서 작동하는 것은 없습니다!

하지만 저는 다른 문제를 발견했습니다.사용자가 HTML을 다음과 같이 입력하는 경우:

<h1>heading</h1><p>some text</p>

괜찮지만, 만약 그들이 다음과 같은 일을 한다면 (어느 것이 더 가능성이 높음)

<h1>heading</h1>
<p>some text</p>

그러면 저는 제목과 단락 사이에 큰 공간이 생깁니다.

다음 코드로 수정하려고 했습니다.

$tempCONTENT = str_ireplace(array(">\r\n<",">\r<",">\n<",'>\r<','>\n<'),'><', $tempCONTENT);

하지만 그것은 효과가 없었습니다 :( 저는 여전히 h1 태그와 p 태그 사이에 추가적인 [br /]를 추가하고 있기 때문에 큰 차이를 느낍니다.

일단 저는 그들에게 HTML 태그 사이에 줄 바꿈을 추가하지 말고 결과가 좋을 것이라고 말할 것입니다 :)

누군가 이것을 유용하게 썼으면 좋겠습니다.

MySQL 데이터베이스의 경우 아무것도 교체해서는 안 됩니다.

  • 문자 그대로의 경우에는\r\n$post_text괜찮습니다. SQL 쿼리에 적합한 형식입니다.
  • 만일의 경우에는\\r\\n$post_text그것은\r\n데이터베이스에서 - 당신은 당신의 문자열을 두 번 탈출했고 아무것도 교체하지 말고 오히려 과도한 탈출을 제거해야 합니다.

그래서 이렇게 해야 됩니다.\r\n에서.$post_text삽입하기 전에, 당신은 지원할 수 있을 것입니다.nl2br()출력 전에 기능합니다.

언급URL : https://stackoverflow.com/questions/5449580/replacing-r-n-with-php