2009-10-09 8 views
0

일반적으로이 작업을 수행합니다.멀티 바이트 문자열에서 "abc123def"를 "abc 123 def"로 대체하십시오.

$str = preg_replace('#(\d+)#', ' $1 ', $str); 

나는 그것이 내가 패턴에 소문자 "U"수정을 추가하고 내가 잘 될 것이라고 생각 UTF-8 될 줄 알았다면. 하지만 utf-8이 네이티브 문자 집합을 사용하는 경우보다 2 배, 어떤 경우에는 3 배의 저장 공간을 사용하기 때문에 utf-8로 응용 프로그램을 제한하지 않기 위해 노력하고 있습니다.

따라서 저는 좋아하는 preg_ 함수를 사용하지 않으려 고합니다.

대부분의 것들은 지금까지는 상당히 간단하지만 나는 보통 "\ d"와 같은 preg_에서 문자 클래스를 사용하는 대체품에 조금 붙어 있습니다.

답변

2

mb_convert_encoding으로 저장소 래퍼를 구현하므로 내부적으로 UTF-8 만 조작하면됩니다.

는 (나는 아직도 당신이 모든 사람에게 많은 문제를 저장할 require UTF-8해야하고 생각합니다.)

+0

내가 궁극적으로 여기서 끝내는 것은 모든 기본 기능이 계속해서 인코딩이 변경 될 수있는 방식으로 mb_ 함수를 사용하는 방식으로 스크립트를 계속 사용하는 것이라고 생각합니다. 활성 인코딩이 utf-8 인 경우에만 사용할 수 있도록 몇 가지 고급 기능을 플래그 지정합니다. – joebert

1

내가 UTF-8 인코딩이 127 이하의 바이트 값으로 인코딩 된 출력에 아무것도 항상되도록이라고 생각 해당 바이트 값과 일치하는 ASCII 문자. 다중 바이트 시퀀스의 일부가 아닙니다. 따라서이 상황에서는 인코딩이 ASCII 인 것처럼 가장 할 수는 있지만 문제는 발생하지 않습니다 (공백 및 숫자는 모두 ASCII 임).

의 설명을 참조하십시오. 여기서 멀티 바이트 시퀀스의 모든 바이트가 최상위 비트 세트 (예 : 모두> 127)를 보여줍니다.

+0

이것은 UTF-8과 ISO-8859-n에서 분명히 드러나지 만, 나는 그가 예를 들어 저장하고있는 더 넓은 인코딩에 대해 특별히 걱정하고 있다고 생각한다. 더 조밀하게 아시아 텍스트. (나는 걱정할 필요가 없다고 생각하고, UTF-8을 요구하며, 행복하게 산다.) –

관련 문제