2017-04-10 2 views
0

내가 내 DB에 저장됩니다 텍스트를 검색 할 수 있습니다. 텍스트는 다음과 같이 보일 수 있습니다 : Welcome & This is a test paragraph. PHP에서 htmlspecialchars()htmlentities()을 사용하여 처리 한 후이 텍스트를 데이터베이스에 저장하면 문장은 Welcome & This is a test paragraph처럼 보입니다. 내가 검색과 같은 텍스트를 표시 할 때어떻게 원래 반드시 htmlspecialchars 사용 후 텍스트()와 htmlentities()에서()를

, 나는 원래 형식이어야합니다. 어떻게해야합니까?

이것은 내가 사용하는 코드입니다.

$text= htmlspecialchars(htmlentities($_POST['text'])); 
$text= mysqli_real_escape_string($conn,$text); 
+0

'html_entity_decode'는'htmlentities'의 대응이다, 그런데 : 잘 준비 문과 바인드'$ _POST를 사용하도록 SQL을 변경 [ '텍스트'] '는 질의에 때문이다. 원래 데이터에서 돌연변이를하기 위해하는 일. – JustOnUnderMillions

+2

왜 이렇게하고 있습니까? 데이터를 변경하지 않고 삽입하고 목적에 맞게 수정합니다. – AbraCadaver

답변

0

두 가지 문제점이 있습니다.

첫째, 당신은 htmlentitieshtmlspecialchars 모두를 사용하여 이중 인코딩 HTML 문자입니다. 이 두 함수는 모두 똑같은 일을하지만, htmlspecialchars은 HTML 문자 엔티티 (특별 것)를 가진 문자의 서브 세트로만 수행합니다. 따라서 예제에서는 앰퍼샌드가 두 번 인코딩됩니다 (이므로 특수 문자), 그래서 당신이 실제로 얻을 것이 무엇은 다음과 같습니다

$example = 'Welcome & This is a test paragraph'; 

$example = htmlentities($example); 
var_dump($example); // 'Welcome & This is a test paragraph' 

$example = htmlspecialchars($example); 
var_dump($example); // 'Welcome & This is a test paragraph' 

당신이 사용해야하는 기능 중 하나는 (아마 htmlspecialchars이 충분합니다) 만 그들 중 하나를 사용하는 결정합니다.

둘째, 잘못된 시간에이 기능을 사용하고 있습니다. htmlentitieshtmlspecialchars는 데이터베이스에 입력 데이터"살균"에 아무것도하지 않습니다. (당신이 언급하지 않은 것처럼, 그건 당신이 의도하고 무슨 말을하지만, 많은 사람들이이 일을하려고하는 것하지 마십시오.) 당신은 SQL 주입으로부터 자신을 보호하려는 경우, bind your values to prepared statements.를 이스케이프 현재 mysqli_real_escape_string로하고 있습니다로 좋다. 그러나 그것은 정말로 충분하지 않다.

htmlspecialcharshtmlentities에는 HTML 문서로 출력 할 문자열의 문자를 변환하는 특정 용도가 있습니다. 네가 할 준비가 될 때까지 기다려라.

관련 문제