이 글은 주로 PHP에서 입력 이스케이프 문자를 처리하는 코드를 소개하고 있습니다. 필요하신 분들은 참고하시면 됩니다
먼저 WordPress 3.6
/** * Add slashes to a string or array of strings. * * This should be used when preparing data for core API that expects slashed data. * This should not be used to escape data going directly into an SQL query. * * @since 3.6.0 * * @param string|array $value String or array of strings to slash. * @return string|array Slashed $value */ function wp_slash( $value ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { if ( is_array( $v ) ) { $value[$k] = wp_slash( $v ); } else { $value[$k] = addslashes( $v ); } } } else { $value = addslashes( $value ); } return $value; }
1번에 소개된 함수를 살펴보겠습니다. 내장 함수: get_magic_quotes_gpc()
이 함수의 기능은 php.ini 설정에서 Magic_quotes_gpc 옵션의 값을 가져오는 것입니다.
magic_quotes_gpc 옵션의 값이 On이면 PHP 파서는 post, get, cookie의 데이터에 이스케이프 문자 ""를 자동으로 추가하여 이러한 데이터가 프로그램의 특수 문자로 인해 발생하는 치명적인 문제를 일으키지 않도록 합니다. 특히 데이터베이스 문 오류.
켜면 작은따옴표('), 큰따옴표("), 백슬래시() 및 NUL(NULL 문자)와 같은 문자가 백슬래시로 처리됩니다. 그렇지 않으면 addlashes()를 사용하여 수동으로 처리해야 합니다.
magic_quotes_gpc 반환 값이 On이면 1, 그렇지 않으면 0을 반환합니다. addslashes() 함수는 지정된 사전 정의 문자 앞에 백슬래시를 추가합니다. 즉, 위에 나열된 문자
if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { foreach(array('_COOKIE', '_POST', '_GET') as $v) { foreach($$v as $kk => $vv) { $kk{0} != '_' && $$v[$kk] = addslashes($vv); } } }
PHP는 이를 마법의 따옴표라고 부르며, 이 세 가지 설정은
HTTP 요청 데이터(GET, POST 및 COOKIE)에 영향을 줍니다. 런타임 시 변경할 수 없습니다. PHP의 기본값은 on입니다.
이 기능을 켜면 GET, POST, COOKIE를 통해 전달된 데이터가 자동으로 이스케이프됩니다.
예를 들어, test.php?id=abc'de"f
echo $_GET['id']; # abc'de"fmagic_quotes_gpc=On이 표시되며 쓰기에는 아무런 영향이 없습니다. 예를 들어, 위의 $_GET['id']가 데이터베이스에 기록되면 여전히 abc'de"f,
반대로, Magic_quotes_gpc=Off;이면 문자에 따옴표가 있어야 합니다. 표시(작은따옴표든 큰따옴표든), 직접 mysql에 쓰면 공백이 됩니다
이 됩니다.
열린 경우 대부분은 데이터베이스 및 텍스트 파일을 포함하여 데이터를 가져오고 반환하는 함수에서 백슬래시로 이스케이프된 데이터를 반환합니다. 이 옵션은 런타임 시 변경될 수 있으며, PHP의 기본값은 off입니다.
활성화된 경우 작은따옴표는 백슬래시 대신 작은따옴표를 사용하여 이스케이프됩니다. 이 옵션은 Magic_quotes_gpc를 완전히 재정의합니다. 두 옵션을 동시에 켜면 작은따옴표가 "로 이스케이프됩니다. 큰따옴표, 백슬래시 및 NULL 문자는 이스케이프되지 않습니다.
내 양식 콘텐츠는 원래: bf9a36689179f49e1731bb9c4c1b3408
5f15f0661a2616bce7072be0b2b242e9
대책 1: php.ini 파일을 수정하세요 (php.ini 수정 방법은 다루지 않고 구글링하시면 됩니다)
대책 2: 취소된 파일을 탈출하세요
1단계: $_POST['content']와 같이 제출한 데이터를 찾아 $content=stripslashes($_POST['content']);
로 변경합니다. 2단계: 나중에 $ 사용 POST[' 교체 content'] with $content
3단계: 데이터베이스에 제출, 데이터베이스 저장 공간은 여전히 정상입니다:e606d21fb2f27aac1fe3a55d62420155다음과 같습니다
643517f8149e33159290d29e24796a6d (알고 계셔야 할 점 이 문제를 어떻게 해결해야 할까요?)
4단계: Stripslashes()를 사용하여 데이터베이스에서 읽은 내용을 필터링합니다.
stripslashes() 이 함수는 addlashes()에 의해 추가된 백슬래시를 제거합니다. 함수. 데이터베이스 또는 HTML 양식에서 검색된 데이터를 정리하는 데 사용됩니다.
(
PHP 페이지에서 다음 상황을 원하지 않는 경우:
작은따옴표는 'Double로 이스케이프됩니다. 따옴표는 "로 이스케이프됩니다.
그러면 다음 설정을 통해 방지할 수 있습니다.
php.ini에 설정: Magic_quotes_gpc = Off)
요약은 다음과 같습니다.
, 입력 및 출력이 불가능합니다.
addslashes() 및 Stripslashes() 작업을 위한 데이터베이스의 문자열 데이터가 정상적으로 표시됩니다.
이때 입력 데이터에 addlashes()를 수행했다면
입력 데이터를 처리하려면 addlashes()를 사용해야 하지만, 출력 형식을 지정하기 위해 Stripslashes()를 사용할 필요는 없습니다. 관련 권장 사항: PHP는 따옴표 앞에 백슬래시를 추가합니다(PHP는 백슬래시를 제거합니다)
addlashes()는 백슬래시를 데이터베이스에 기록하지 않기 때문에 mysql이 데이터 실행을 완료하는 데만 도움이 됩니다. SQL 문.
위 내용은 PHP는 입력 이스케이프 문자를 처리하기 위한 코드를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!