2012-06-18 1 views
1

각 줄이 여러 줄의 주석을 나타낼 수있는 파일 집합이 파일에 있습니다. 원 개발자가 선택한 행 분리 기호는 필자가 누군가의 코멘트에 결코 나타나지 않을 것이라고 느꼈기 때문에 필 크로 (¶)였습니다. 나는 지금 이것을 데이터베이스에 넣고 더 전형적인 라인 구분자를 사용하기를 원한다. (하나는 어플리케이션 설치자에 의해 설정 될 수 있지만).다른 문자 인코딩을 사용하여 파일에서 문자열 처리 (ISO-8859-1 대 UTF-8)

일부 줄은 ISO-8859-1 인코딩 (16 진수 b6)을 사용하고 다른 일부는 UTF-8 인코딩 (16 진수 c2b6)을 사용합니다. 나는 현재하고있는 것보다 더 나은 지원을하는 이것을 처리하는 우아한 방법을 찾고있다.

는 지금까지 그것을 처리 한 방법이지만, 나는 오히려 더 우아한 해결책을 찾고 있어요 :

// Due to the way the quote file is stored, line breaks can either be 
// in 2-byte or 1-byte characters for the pilcrow. Since we're dealing 
// with them on a unix system, it makes more sense to replace these 
// funky characters with a newline character as is more standard. 
// 
// To do this, however, requires a bit of chicanery. We have to do 
// 1-byte replacement, but with a 2-byte character. 
// 
// First, some constants: 
define('PILCROW', '¶'); // standard two-byte pilcrow character 
define('SHORT_PILCROW', chr(0XB6)); // the one-byte version used in the source data some places 
define('NEEDLE', '/['.PILCROW.SHORT_PILCROW.']/'); // this is what is searched for 
define('REPLACEMENT', $GLOBALS['linesep']); 

function fix_line_breaks($quote) 
{ 
    $t0 = preg_replace(NEEDLE,REPLACEMENT,$quote); // convert either long or short pilcrow to a newline. 
    return $t0; 
} 
+3

혼합 문자 세트에 대한 Yuck! 나는 당신을 위해 느낀다 :-( –

+0

줄 바꿈을하고, ISO-8859-1 라인의 utf8_decode를 사용하여 UTF-8로 데이터베이스에 각 줄을 넣는 것이 어떨까요? 각 줄을 다른 레코드에 넣으면 새로운 구분 기호가 필요할 것 같습니다. –

+0

@dystroy - 파일의 각 줄에 여러 줄 주석이 포함될 수 있습니다. 파일 자체의 각 줄은 데이터베이스에 저장됩니다. 출력시 혼합 된 인코딩을 처리하기 위해 입력이 깨끗한 상태로 유지되는지 확인하고 여러 줄을 유지해야합니다. 어려움은 어떤 줄이 어떤 구분 기호를 포함하는지 알려주지 못합니다. – tamouse

답변

0

내가 이런 식으로 할 것 :

define('PILCROW', '¶'); // standard two-byte pilcrow character 
define('REPLACEMENT', $GLOBALS['linesep']); 

function fix_encoding($quote) { 
    return mb_convert_encoding($quote, 'UTF-8', mb_detect_encoding($quote)); 
} 

function fix_line_breaks($quote) { 
    // convert UTF-8 pilcrow to a newline. 
    return str_replace(PILCROW, REPLACEMENT, $quote); 
} 

각각에 대해 라인 코멘트, 전화 fix_encoding 다음 fix_line_breaks

$quote = fix_encoding($quote); 
$quote = fix_line_breaks($quote); 
+0

오, 좋았어, 고마워. 나는 비슷한 것을 생각 해냈다. 다른 방법으로 UTF-8 문자열을 변환하는 방법을 찾아 냈지만 이것이 더 좋을 수도 있습니다. 흥미롭게도 8859 버전에서'mb_detect_encoding'을 실행하면 빈 문자열을 반환합니다. – tamouse

+0

괜찮습니다. mb_detect_encoding은 FALSE를 반환하므로 함수가이를 확인하고 ISO-8859-1을 대신 사용해야합니다. 그것은 작동합니다! – tamouse

관련 문제