ThinkPHP conf 파일의 Convention.php에는 구성 옵션이 있습니다
'DEFAULT_FILTER' => 'htmlspecialchars', // I 함수의 기본 매개변수 필터링 방법...
이 방법은 기본적으로 활성화되어 있습니다. 즉, 데이터베이스에 저장한 데이터는 htmlspecialchars 함수에 의해 이스케이프됩니다.
저는 프로젝트에서 Kindeditor 서식 있는 텍스트 편집기를 사용합니다(아마도 Ueditorckeditor를 사용하고 있을 것입니다). 서식 있는 텍스트 편집기를 통해 기사의 내용을 편집하고 데이터베이스에 저장한 다음 데이터베이스에서 읽어서 표시합니다. 웹페이지에서.
이 과정에서 데이터베이스에 제출할 텍스트 데이터를 insert 방식으로 직접 표시하면 정상적으로 HTML 페이지로 파싱이 되는데, 데이터베이스에서 HTML 데이터를 읽을 때 문제가 발생했습니다. 이때 기사 내용은 HTML 코드 전체가 됩니다. 덤프는 내가 읽은 배열의 내용을 출력하며, 내용이 이스케이프되었음을 분명히 알 수 있습니다.
1. 데이터베이스에 저장된 콘텐츠 및 기사 내용 읽기 예시:
<p> 你们知道吗? </p>
2. HTML 페이지에서 구문 분석된 콘텐츠 효과:
“<p> <span style="white-space:pre"> </span><img src="/17joys/Public/kindeditor/attached/image/20140807/20140807110915_31727.jpg" alt="" width="800" height="600"> <span style="white-space:pre"> </span></p>”
HTML 태그로 변환해야 할 내용이 이제 텍스트 내용으로 파싱되고 텍스트 내용의 가장 바깥 부분에 큰따옴표가 추가되는 것은 당연합니다.
일반 표시에는 큰따옴표가 없어야 합니다. 데이터베이스에서 읽은 데이터는 HTML 페이지의 소스 코드이며 HTML 페이지에 삽입된 후 태그가 해석되어 태그의 내용이 페이지로 표시됩니다.
위의 분석을 통해 ThinkPHP는 콘텐츠 저장 과정에서 자동으로 콘텐츠를 이스케이프 처리하여 데이터베이스에 저장된 콘텐츠를 다시 읽어보면 원래 속한 HTML 콘텐츠인 것을 확인할 수 있습니다. 태그에 대한 내용은 자동으로 본문 텍스트로 이스케이프됩니다.
그러므로 과감히 TP의 conf 디렉터리로 가서 Convention.php 구성 파일을 찾아 DEFAULT_FILTER 함수를 비활성화하고 나중에 사용해야 할 때 수동으로 호출하세요.
다시 테스트해 보세요. 이번에는 문제가 해결되었습니다.