2012-03-19 1 views
2

PHP 스크립트가 외부 소스로부터 수신 할 형식이 잘못 지정된 문자열을 삭제하는 기능을 작성했습니다. 이 문자열의 문제점은 모든 홀수 바이트가 0이므로 모든 짝수 번호의 바이트를 새 배열로 푸시한다는 것입니다. Code :

$serverInfoClean = array(); 
for ($i = 0; $i < strlen($serverInfo); $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
     // Do nothing 
    } 
    else // Even index 
    { 
     array_push($serverInfoClean, $serverInfo[i]); 
     echo $i . ' ' . $serverInfo[i] . '<br/>'; // Debug 
    } 
} 

디버그 라인은 그래서 그것을 반환 값 브라우저에서이 볼 수 있습니다. 매번 문자열의 첫 번째 문자를 반환합니다.

+3

으로 $serverInfo[i] 바꾸기 변수는 '$'접두어로 표시된다; 'i'는 변수가 아니며'$ i'만이 변수입니다. – Gumbo

+0

... 나는 그것을 놓친다 고 나는 믿을 수 없다. – Surma

답변

2
$serverInfoClean = array(); 
$end = strlen($serverInfo); 
for ($i = 0; $i < $end; $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
      // Do nothing 
    } 
    else // Even index 
    { 
      array_push($serverInfoClean, $serverInfo[$i]); 
      echo $i . ' ' . $serverInfo[$i] . '<br/>'; // Debug 
    } 
} 
+0

strlen을 루프 바깥에 놓으면 반복 할 때마다 평가할 필요가 없습니다. 맞습니까? – Surma

+0

correct-a-mundo –

1

"형식이 잘못 지정된 문자열"이라고 결론을 내리지 않아도됩니다. 문자열이 UTF-16으로 인코딩 된 것처럼 들리므로 비 ASCII (유니 코드) 문자에서도 작동합니다.

대신 multibyte string functions을 사용하여 멀티 바이트 문자를 올바르게 처리 할 수 ​​있습니다.

+0

아, 고마워! 그게 코딩을 해줄거야. – Surma

0

PHP에서 $serverInfo[$i]

관련 문제