2011-01-09 4 views
4

UTF-8로 변환 한 후 MySQL 데이터베이스에서 일부 직렬화 된 데이터 (분명히)로 문제를 해결하려고합니다. 내가 그들을를 unserialize 할 때, 나는 평소 얻을 :PHP에서 바이트 오프셋에서 문자를 찾는 방법은 무엇입니까?

Notice: unserialize() [function.unserialize]: Error at offset 1481 of 255200 bytes [...] 

그러나,이 멀티 바이트 문자열이, 내가 오프셋 바이트에서 어떤 문자를 찾는 방법을 알아낼 수 없습니다입니다 주어진. 내가 필요한 것은 substr()과 같지만 문자 대신에 바이트입니다. 어떻게해야합니까?

미리 감사드립니다.

답변

2

을 당신은 substr($str, 1481, 2);, substr($str, 1481, 3); 또는 substr($str, 1481, 4);을해야한다. UTF-8이면 UTF-8 문자가 첫 번째 문자에 따라 2에서 4 개의 문자를 사용할 수 있기 때문에 3 번째 하위 문자열에서 찾을 수 있습니다.

나는 많은 문제를 겪었으므로 인코딩으로 무슨 일이 일어나는지 찾지 못하면 다시 대답 해 주겠다 :-) 나는 당신에게 손을 빌려 주겠다.

행운을 빈다.

편집 : 헤더 ("Content-type : text/html; charset = utf8")를 잊지 마세요. 결과를 제대로 볼 수 있습니다.

+0

고마워요! 인코딩으로 내 문제를 해결할 수는 없지만 올바른 것으로 표시 했으므로이를 허용으로 표시했습니다. 내가 가지고있는 캐릭터는 그리스어 ς 였지만, ς의 모든 인스턴스를 latin으로 대체 한 후에도 문자열은 여전히 ​​직렬화되지 않는다. (모든 아이디어? –

+0

'serialize())'는 지저분합니다. 배열과 스칼라 만 저장하는 경우'serialize() '대신 json_encode()를 사용하는 것이 좋습니다. –

+0

동의하지만 응용 프로그램을 작성하지는 않았지만 큰 변화가있었습니다. 이 지점에서. –

0

substr은 문자 대신 바이트에서 작동합니다. 그래서 이것은 1천4백81번째 바이트를 반환해야합니다 :

substr($data, 1481, 1) 
관련 문제