PHP의 고정 양식 값에서 큰따옴표 이스케이프 처리
-
07-07-2019 - |
문제
값에 큰따옴표가 있는 경우 양식 제출 시 입력된 내용을 기억하는 고정 양식을 만드는 데 약간의 문제가 있습니다.문제는 HTML이 다음과 같이 읽어야 한다는 것입니다.
<input type="text" name="something" value="Whatever value you entered" />
그러나 문구가 다음과 같은 경우:"어떻게해야하나요?" 따옴표와 함께 입력하면 결과 HTML은 다음과 유사합니다.
<input type="text" this?="" do="" i="" how="" value="" name="something"/>
큰따옴표를 어떻게 필터링해야 합니까?나는 마법의 따옴표를 켜거나 끄고 시도해 보았고 스트립 슬래시와 추가 래시를 사용했지만 지금까지 올바른 해결책을 찾지 못했습니다.PHP에서 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
해결책
당신은 원합니다 htmlentities ().
<input type="text" value="<?php echo htmlentities($myValue); ?>">
다른 팁
위는 HTML 엔티티 코드가있는 모든 종류의 문자를 인코딩합니다. 나는 사용하는 것을 선호한다 :
htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');
이것은 단지 인코딩됩니다.
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
$ myValue에서 strip_tags를 수행하여 HTML 및 PHP 태그를 제거 할 수도 있습니다.
이것이 내가 사용하는 것입니다:
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
ENT_QUOTES
PHP가 작은 따옴표와 큰 따옴표를 모두 변환하도록 지시하는데, 이것이 바람직하다고 생각합니다.ENT_SUBSTITUTE
그리고ENT_DISALLOWED
유효하지 않은 유니코드를 처리합니다.그것들은 매우 유사합니다. 제가 이해하는 한, 첫 번째는 유효하지 않은 코드 단위 시퀀스를 대체합니다. 잘못 인코딩된 문자 또는 문자를 나타내지 않는 시퀀스, 두 번째는 주어진 문서 유형에 대해 유효하지 않은 코드 포인트를 대체합니다. 지정된 문서 유형에 허용되지 않는 문자 (또는 명시적으로 지정하지 않은 경우 기본값).그만큼 선적 서류 비치 바람직하지 않게 간결합니다.ENT_HTML5
내가 사용하는 문서 유형입니다.다른 것을 사용할 수 있지만 페이지 문서 유형과 일치해야 합니다.UTF-8
내 문서의 인코딩입니다.PHP 5.4.0을 사용하고 있다는 확신이 없다면 특히 인코딩을 명시적으로 지정하는 것이 좋습니다. 특히 영어가 아닌 텍스트를 처리하는 경우에는 더욱 그렇습니다.제가 작업하는 호스트는 5.2.something을 사용합니다. 기본값은 다음과 같습니다.ISO-8859-1
그리고 횡설수설을 만들어냅니다.
처럼 똑똑한 제안, htmlspecialchars
예약된 HTML 문자만 인코딩하는 반면 htmlentities
HTML 표현이 있는 모든 것을 변환합니다.대부분의 상황에서는 둘 중 하나가 작업을 수행합니다. 여기 주제에 대한 토론입니다.
하나 더:매직 따옴표는 잘못된 보안 감각을 제공하고 5.3.0에서 더 이상 사용되지 않고 5.4.0에서 제거되므로 비활성화된 상태로 유지하는 것이 가장 좋습니다.활성화된 경우 포스트백 시 필드의 각 인용 앞에 백슬래시가 추가됩니다(여러 포스트백으로 인해 점점 더 많은 슬래시가 추가됩니다).OP가 설정을 변경할 수 있지만 향후 참조를 위해 다음을 참조하세요.공유 호스트에 있거나 다른 방법으로 액세스할 수 없는 경우 php.ini
, 가장 쉬운 방법은 추가하는 것입니다
php_flag magic_quotes_gpc Off
~로 .htaccess
파일.