양식이 있습니다. 사용자가 데이터를 제출하면 내 스크립트는텍스트에서 태그를 제거 하시겠습니까?
$text1 = strip_tags($text);
으로 텍스트를 확인한 다음 데이터베이스에 데이터를 삽입합니다. 그러나 사용자가 "내가 완전히 < 3이 웹 사이트"와 같은 내용을 제출하면 "나는 완전히"삽입합니다. 이 문제를 어떻게 해결할 수 있습니까?
당신은 그들을 제거하는 대신 그 문자를 이스케이프 할 필요가
양식이 있습니다. 사용자가 데이터를 제출하면 내 스크립트는텍스트에서 태그를 제거 하시겠습니까?
$text1 = strip_tags($text);
으로 텍스트를 확인한 다음 데이터베이스에 데이터를 삽입합니다. 그러나 사용자가 "내가 완전히 < 3이 웹 사이트"와 같은 내용을 제출하면 "나는 완전히"삽입합니다. 이 문제를 어떻게 해결할 수 있습니까?
당신은 그들을 제거하는 대신 그 문자를 이스케이프 할 필요가
(필자는 태그를 제거해야합니다). 이를 달성하기 위해 htmlspecialchars 함수를 사용할 수 있습니다. 예 :
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
특수 문자를 HTML 엔터티로 이스케이프하여 올바르게 표시합니다.
하지만 태그를 제거해야합니다 ... – Akos
왜 다른 사람처럼 할 수 없으며 HTML 이스케이프 처리 된 항목을 사용할 수 없습니까? –
태그를 해당 명칭으로 대체 할 수 있습니다. 삭제하지 마십시오. 사용
htmlspecialchars()
잘 모르겠어요 왜이 작업을 수행하려면,하지만 당신은
$stripped = str_replace(array('<', '>'), '', $text);
을 수행하여 <
및 >
을 제거 할 수 있지만 내가 문자열을 탈출 제안 이와 같이 대신
$escaped = htmlspecialchars($text);
// or
$escaped = htmlentities($text);
swer는 htmlentities을 다른 답변에 언급 된대로 사용하는 것이므로 태그를 제거하기 전에 항상 $text
을 사전 처리하는 배열을 사용할 수 있습니다. 아마 적절한 결과를 생각해야하는, 그래서 -
$search = array('<3', ':<');
$replace = array('<3', ':<');
echo strip_tags(str_replace($search, $replace, $text));
물론, 당신은 당신의 배열은 이러한 특별한 경우의 새로운 인스턴스를 얻을 때마다 업데이트해야 할 것입니다.
데이터베이스에 넣으려면 strip_tags
을 사용하고 적절한 mysqli_real_escape_string
함수 또는 prepared statements을 사용하지 마십시오. 나중에 html 페이지에서 내용을 출력 할 때 htmlspecialchars
* 한숨 * 'strip_tags'을 남용하는 것처럼 들립니다. – Lekensteyn