2014-04-09 6 views
2

내 웹 사이트의 텍스트 필드에있는 문자 수를 계산하고 싶습니다. 텍스트 필드는 아스키 아트 및 기타 특수 문자를 포함하여 사용자로부터의 모든 유형의 입력을 허용합니다. 사용자가 일반 문자로 입력하면 strlen ($ message)을 사용하여 값을 반환 할 수 있지만 사용자가 Â 또는 ©와 같은 특수 문자를 사용하면 개수가 잘못됩니다.PHP로 특수 문자 계산하기

무거운 물건을 들지 않고도 모든 것을 셀 수있는 간단한 방법이 있습니까?

+6

멀티 바이트 문자열의 경우 http://php.net/mb_strlen –

+0

문자열이 화면에 얼마나 오랫동안 있는지 알고 싶다면 힘듭니다. 'mb_strlen()'은 "문자"만을 계산하지만 표시되지 않는 문자, 선행 문자를 수정하는 문자 (유니 코드 이상) 등이 있습니다. –

답변

4

, 당신은이 작업을 수행 할 수 있습니다

$count = preg_match_all('/\X/u', $text); 

Here 몇 가지 설명입니다. 유니 코드 그래픽은 유니 코드 코드 포인트 ("combining marks")를 포함하여 "문자"(유니 코드 코드 포인트)입니다.

mb_strlen($text, 'UTF-8')은 별도의 문자로 표시를 조합합니다. 여기

$count = preg_match_all('/\X/u', html_entity_decode($text, ENT_QUOTES, 'UTF-8')); 
+0

와우 - 놀랍습니다! 완벽하게 작동합니다. 감사!!! – user1399181

0

strlen & mb_strlen이 모두 정상적으로 작동합니다.

입력 한 특수 문자가 표시되지 않을 수도 있습니다 (유니 코드). 따라서 읽을 수없는 문자를 시도하십시오.

희망이 도움이됩니다. 귀하의 의견은 UTF-8 인코딩과 유니 코드 제자 계산하려면

+0

mb_stren은 내가 제공 한 예제에서 작동합니다. 그러나 누군가가 "<"보다 작은 부호를 입력하면 wordpress로 <으로 변환되고 4 문자로 계산됩니다. 나는 그것이 wordpress로 변환되는 유일한 문자라고 믿기 때문에, 나는 less-than 기호 (n)의 수를 세고 전체 문자 수에서 4n을 뺄 수 있다고 생각하고있다. – user1399181

0

당신이가는 : 당신의 코멘트에 의해 판단, 귀하의 의견은 자신의 HTML 엔티티 동등한로 변환 일부 문자를 가질 수 있기 때문에

, 당신은 먼저 html_entity_decode()해야한다. 작동 원리

function countumlauts($str) { 
    return strlen($str) - iconv_strlen($str); 
} 

: 특수 문자는 하나 이상의 바이트를 사용합니다. strlen은 바이트를 계산하고 iconv_strlen은 문자를 계산합니다.