2009-10-03 5 views
2

이 상상 :PHP : POST 데이터 + 아포스트로피

  • 양식 데이터는
  • 양식이 데이터베이스
  • 데이터베이스 데이터에 기록됩니다
  • POST 데이터를 직렬화됩니다
  • POST 데이터를 제출됩니다 아포스트로피가 들어 검색 됨
  • 데이터를 직렬화 할 수 없습니다.

문제는 직렬화 된 데이터에서 발견됩니다.

  • 의 : 7 : 내가없이 아포스트로피와 노력 "회사"; S : 12 : "Joes의 회사"
  • 의 : 7 : "회사"; S : 14 : "조의 회사"

나는 POST 데이터가 따옴표와 아포스트로피에 슬래시를 추가하지만 어딘가에 슬래시가 제거되어 직렬화가 중단된다는 것을 알고있다. 나는 어디에서든지 stripslashes() 함수를 사용하지 않고있다.

+0

코드를 보여주세요. – strager

+0

목록에있는 각 단계의 출력을 보면이 사실을 알 수 있습니다. – strager

답변

0

DB에 직렬화 된 데이터를 작성하고 관계 또는 고급 db 기능을 사용하지 않는 경우에는 db에 삽입하기 전에 serialize 된 데이터를 base64로 인코딩하고 다시 읽을 때 디코딩 할 수 있습니다.

1

슬래시가 추가 될 예정입니까? Magic Quotes가 활성화 된 경우에만 발생합니다.

+0

매직 인용 부호가 사용 가능하며 슬래시가 추가됩니다. 나는 다음과 같이 좁혔다 : 내 SQL 쿼리에서 값을 아포스트로피로 묶는다. 다음을 시도해 보면 "$ test = '"company "; s : 14 :"Joe \'s company " '; echo $ test;"는 슬래시가없는 문자열을 반환합니다. 이 때문에 DB에 슬래시가 한 번 나타나지 않습니다. 그러나 직렬화 된 문자열에는 따옴표와 아포스트로피가 있기 때문에 어떻게 사용하지 않고 DB에 삽입합니까? –

+0

해결책을 찾았습니다. Magic Quotes가 POST 데이터에 슬래시를 추가하더라도 직렬화 된 문자열에 addslashes()를 추가로 수행해야 데이터베이스에 추가 할 수 있으므로 따옴표 나 아포스트로피로 닫을 수 있습니다. 값이 DB에서 검색되고 직렬화되지 않으면 stripslashes()를 사용할 수 있습니다. –

+0

첫 번째 질문에 대한 답변 : 준비된 성명서를 사용하여 mysqli 또는 pdo를 확인하십시오. – jeroen