현재 위치: > 최신 기사 목록> PHP의 ctype_graph 함수를 사용할 때 주목해야 할 제한 사항은 무엇입니까? 완전한 설명

PHP의 ctype_graph 함수를 사용할 때 주목해야 할 제한 사항은 무엇입니까? 완전한 설명

gitbox 2025-06-22

1. ctype_graph 함수의 기본 사용

CTYPE_GRAPH 함수의 기본 사용은 매우 간단하며 문자열을 입력 매개 변수로 취하고 부울 값을 반환합니다. True 의 반환 값은 문자열의 모든 문자가 "인쇄 가능한 비 공간 문자"임을 의미하며, 거짓 의 반환 값은 기준을 충족하지 않는 문자가 있음을 의미합니다.

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello123!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_graph</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에 포함 된 문자는 인쇄 가능한 비 공간 문자입니다.。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에는 인쇄 할 수없는 문자 나 공백이 포함되어 있습니다。"</span></span><span>;
}
</span></span>

2. ctype_graph 의 작동 방식

ctype_graph 함수에 의해 확인 된 문자 세트에는 문자, 숫자, 구두점 마크 및 기타 특수 기호와 같은 대부분의 가시 문자가 포함됩니다. 공간 문자는 그래픽 문자로 간주되지 않으므로 문자열에 공백이 포함되어 있으면 ctype_graph가 false를 반환합니다.

또한 CTYPE_GRAPH는 문자열에서 제어 문자, 줄 브레이크, 탭 등과 같은 특수 문자를 확인하지 않습니다. 따라서 텍스트가 사용자가 가시 가능하고 유효한 입력으로 구성되어 있는지 확인하는 데 특히 적합합니다.

3. 제한 및 예방 조치

ctype_graph 함수는 문자열 검증에서 매우 유용하지만 실제로 사용해야 할 몇 가지 제한 사항과 사항이 있습니다.

3.1 다중 바이트 캐릭터는 지원되지 않습니다 (예 : 중국어, 일본어 등)

ctype_graph 함수는 단일 바이트 문자 세트 (예 : ISO-8859-1, ASCII 등)에만 적합합니다. 다중 바이트 캐릭터 세트 (예 : UTF-8에 인코딩 된 중국어 및 일본어 등)의 경우 CTYPE_GRAPH는 문자를 올바르게 인식하지 못할 수 있으므로 사용할 때 인코딩 형식에 특별한주의를 기울여야합니다.

예를 들어, 다음 코드는 예상대로 작동하지 않을 수 있습니다.

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"안녕하세요123!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_graph</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에 포함 된 문자는 인쇄 가능한 비 공간 문자입니다.。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에는 인쇄 할 수없는 문자 나 공백이 포함되어 있습니다。"</span></span><span>;
}
</span></span>

이 경우 Ctype_graph는 "hello"와 "123!"라는 경우에도 False를 반환합니다! 문자열에서 둘 다 인쇄 가능한 문자 인 것 같습니다. 이 문제를 해결하기 위해 먼저 문자열을 적절한 문자 인코딩으로 변환하거나 특수 멀티 파이트 문자 함수를 사용하여 처리 할 수 ​​있습니다.

3.2 공간 및 제어 문자

ctype_graph는 공간 문자를 유효한 문자로 취급하지 않습니다. 실제 개발에서 문자열에 유효한 문자가 포함되어 있는지 확인하려면 다른 CTYPE 기능과 함께 사용할 수 있습니다. 예를 들어, CTYPE_SPACE 함수를 사용하여 문자열에 공간 문자 만 포함되어 있는지 확인하십시오.

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_space</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에는 공간 문자 만 포함됩니다。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에는 단순한 공간 이상의 공간이 포함되어 있습니다。"</span></span><span>;
}
</span></span>

3.3 문자 세트의 현지화를 처리하지 마십시오

CTYPE_GRAPH 함수는 문자가 ASCII 사양을 준수하는지 여부를 확인하므로 다른 로컬에서 문자의 특수 요구 사항을 고려할 수 없습니다. 비 ASCII 문자 세트를 다루는 경우 MB_DETECT_ENCODING 와 같은 다른 방법을 사용하거나 정규 표현식을 사용하여 다른 지역의 문자를 처리해야 할 수도 있습니다.

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"?Hola Mundo!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/[^\x00-\x7F]/'</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"문자열에는 비 포함됩니다ASCII성격。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"성격串只包含ASCII성격。"</span></span><span>;
}
</span></span>

3.4 CTYPE_GRAPHCTYPE_PRINT 의 차이

ctype_print 함수는 ctype_graph 함수와 매우 유사하지만 약간의 차이가 있습니다. ctype_print는 공간 문자를 유효한 문자로 간주하지만 ctype_graph는 그렇지 않습니다. 따라서 CTYPE_PRINT를 사용하여 문자열이 인쇄 가능한 문자 (공백 포함)로 구성되어 있는지 확인할 수 있습니다.

예를 들어:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello World!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_print</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"성격串是可打印的。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"성격串包含不可打印的성격。"</span></span><span>;
}
</span></span>

4. 성능 예방 조치

ctype_graph 함수의 성능은 일반적으로 충분하지만 ctype_graph 함수를 사용하면 매우 긴 문자열 또는 빈번한 통화에 대한 성능 오버 헤드를 가질 수 있습니다. 자주 문자열 검증 작업을 수행 해야하는 경우 매번 CType_graph에 전화하지 않도록 입력을 사전 청소하는 것을 고려할 수 있습니다.

5. 일반적인 응용 프로그램 시나리오

  • 사용자 입력 확인 : 양식 데이터를 처리 할 때 CTYPE_GRAPH는 입력 데이터가 특히 공백 또는 제어 문자를 제외해야 할 때 입력 데이터가 기대와 일치 함을 확인하는 데 도움이 될 수 있습니다.

  • 텍스트 처리 : 텍스트에 눈에 보이는 문자 만 포함되도록 해야하는 경우 로그 파일 처리, 데이터 청소 등과 같은 검증을 위해 CTYPE_GRAPH를 사용할 수 있습니다.

  • 보안 : 사용자 입력을 처리 할 때 CTYPE_GRAPH는 악의적 인 문자 또는 우주 주입 공격을 방지하여 응용 프로그램 보안을 증가시킬 수 있습니다.