2016-10-26 5 views
0

TinyMCE를 사용하여 phpMyAdmin의 SQL 테이블에 일부 HTML을 저장하고 있습니다. 삽입 및 테이블에서 행을 검색 잘 작동합니다.데이터베이스에서 올바른 HTML 서식 지정

나는 검색된 텍스트의 일부 짧은 코드를 번역하기 위해 정규 표현식을 사용하고 있으며, 이것은 문제가 발생한 곳입니다.

이것은 단순히 가능한 html 태그 새로운 라인이 단축 코드 사이의 텍스트를 얻을 내 정규 표현식이다 : 나는 DB에서 HTML을 검색하고 그 위에 정규식을 실행하면

/(<.+>)?[[]{$code}[]](<\/.+>)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?/

, preg_match_all()은 어떤 것과도 일치하지 않지만 데이터베이스의 행을 두 번 클릭하고 인라인 편집기를 열면 phpMyAdmin은 행을 자동으로 업데이트하고 텍스트를 새로운 값으로 설정합니다 ; 그런 다음 새로 업데이트 된 값에서 정규식을 실행하면 preg_match_all()이 올바른 값과 일치합니다.

나는 자동 텍스트 인코딩 변환이라고 생각했지만, 실제로 삽입하기 전에 mb_detect_encoding()을 HTML에서 실행하면 인코딩이 UTF-8 인 것을 테이블의 utf8_unicode_ci과 동일하게 확인합니다.

나는 메모와 ++에서 업데이트 전후의 텍스트와 EOL 문자를 비교했으며 정확하게 동일하지만 phpMyAdmin이 업데이트하기 전에는 정규식이 작동하지 않습니다.

phpMyAdmin은 텍스트를 수정하기 위해 무엇을하고 어떻게 데이터베이스에 삽입되기 전에 할 수 있습니까? 행을 자동으로 업데이트하는 이유는 무엇입니까?

+0

내가 당신이라면 $ _SESSION 값을 DB에 저장하기 전에 저장하고, PHPMyAdmin에서 업데이트가 발생하고 비교 한 후에 새 값을 가져옵니다. htmlspecialchars()를 사용하여 strlen()을 사용했을 수도 있습니다 ... 각 문자를 ord()로 바꿔도 ... 나는 단지 큰 소리로 생각하고 있습니다. 추신 일부 코드를 보여 주거나 jsfiddle을 제공하면 우리에게 도움이 될 것입니다. – Kamae

답변

0

같은 줄에 짧은 코드 뒤에 내용을 확인하기 위해 정규 표현식에 코드를 몇 개 더 추가했습니다. 이제는 preg_match_all()이 매번 정확하게 일치합니다. 나는 업데이트 전후의 내용이 내가 시도한 모든 테스트 (동일 텍스트, 동일한 공백 및 줄 바꿈 문자)에서 동일하기 때문에 어떤 일이 벌어지는 지 아직 확실하지 않다.

에 관계없이, 내가 최종 HTML 태그의 확인 후 아래 정규식을 추가하여 고정 :

(?:.+)?

그래서 전체 식입니다 :

(<.+>)?[[]{$code}[]](<\/.+>)?(?:.+)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?