2016-06-21 7 views
1

I가 PHP 다음 코드PHP의 UTF8 인코딩 및 디코딩

$test = "\151\163\142\156"; 
echo utf8_decode($test); 
var_dump($test); 

난 다음 결과를 얻을 :

isbn 
string(4) "isbn" 

I는 \을 갖는 TXT 파일로부터 텍스트를 얻기가 151 \ 텍스트 (163) \ 156 142 \

$all_text = file_get_contents('test.txt'); 
var_dump($all_text); 

결과 :

01,237,664,787,618,977 나는 다음과 같은 질문이

:

  1. 어떻게 내가 두 번째 텍스트를 디코딩 UTF8 수는 그래서는 ISBN의 결과를 얻을?

  2. \ 151 \ 163 \ 142 \ 156을 얻기 위해 어떻게 isbn을 인코딩 할 수 있습니까?

내가의 iconv 및 인코딩하지만 아무것도 모든 노력을 (의견)에서

편집했다. .txt 파일의 텍스트는 string (16)이며 string (4)이 아니므로 인코딩 할 수 있습니다. txt 파일이 서양 (ISO 8859-1) 인코딩 숭고한에서 저장

+3

? 'utf8_decode ($ all_text);'? 'utf8_encode ('필요한 것')'? –

+0

이 작동하지 않습니다. 나는 동일한 텍스트가 아니라 인코딩 된 텍스트를 얻는다. 보시다시피 첫 번째 $ test는 string (4)이고 두 번째 문자열 (16) –

+0

두 번째 문자열을 디코 드합니까? __DECODED__'$ all_text'의 출력을 표시하십시오 –

답변

1

UTF-8 인코딩 그 부분을 완전히 잊어 버리십시오. utf8_decode 코드에서 아무 것도하지 않습니다. iconv은 전적으로 관련이 없습니다.

이것은 PHP 문자열 리터럴 해석과 관련이 있습니다.정규 표현식과 일치하는 문자의 순서가 자동으로 바이트에 맞게 오버 플로우 8 진수의 문자 (

\[0-7]{1,3}
입니다 예를 들어, "\ 400 : "\151\163\142\156"\...은 특별한 PHP 문자열 리터럴 이스케이프 시퀀스입니다 "==="\ 000 ")

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double

매우 쉽게 PHP 문자열에 문자 작성 때 작동하는 이유를 설명하고, 오에서 읽을 때 작동하지 않습니다

utside 소스 (file_get_contents을 통해 읽은 외부 텍스트가 PHP 코드로 해석되지 않기 때문에). 단순히 echo "\151\163\142\156"을 수행하면 다른 변환없이 "isbn"이 표시됩니다.

수동 (: 자신의 바이트 등가물 정말) : 자신의 캐릭터 등가물에 문자열 \151\163\142\156의 개별 이스케이프 시퀀스를 변환하려면

$string = '\151\163\142\156'; // note: single quotes cause no iterpretation 
echo preg_replace_callback('/\\\\([0-7]{1,3})/', function ($m) { 
    return chr(octdec($m[1])); 
}, $string) 
// isbn 

stripcslashes이 기능을 포함하는 일뿐만 아니라 다른 전체를 많이하지 바람직하지 않은 일들. 주위

다른 방법 : 진심

$string = 'isbn'; 
preg_replace_callback('/./', function ($m) { 
    return '\\' . decoct(ord($m[0])); 
}, $string) 
// \151\163\142\156 
+0

감사합니다. 그게 내가하고 싶었던거야. –

1

stripcslashes를 사용해보십시오 :이 파일을 테스트

<?php 

$test = "\151\163\142\156"; 
echo utf8_decode($test);       // "isbn" 
var_dump($test); 

echo "<br/><br/><br/>"; 

$all_text = file_get_contents("test.txt"); 
echo utf8_decode($all_text) .     // "\151\163\142\156" 
    "<br/>" . 
    utf8_decode(stripcslashes($all_text)); // "isbn" 
var_dump(stripcslashes($all_text)); 

?> 

:

:

이 텍스트입니다

\ 151 \ 163 \ 142 \ 156

그리고 이것은 더 많은 텍스트입니다 !!!

다음 코드를 문자로 변환하는 방법입니다 :

<?php 
$test = "isbn"; 
$coded = ""; 
for ($i = 0; $i < strlen($test); $i++) // PROCESS EACH CHAR IN STRING. 
    $coded .= "\\" . decoct(ord($test[ $i ])); // CHAR CODE TO OCTAL. 

echo $coded .       // "\151\163\142\156" 
    "<br/>" . 
    stripcslashes($coded);   // "isbn". 
?> 

의 우리가 어디서나 호출 할 수있는 기능이 더 일반적인 만들어 보자 :이 할 수있는 절대적으로 아무 상관이

<?php 
function code_string ($s) 
{ $coded = ""; 
    for ($i = 0; $i < strlen($s); $i++) 
    $coded .= "\\" . decoct(ord($s[ $i ])); 
    return $coded; 
} 

$x = code_string("isbn"); 
echo $x .       // "\151\163\142\156" 
    "<br/>" . 
    stripcslashes($x);   // "isbn". 
?> 
+0

'utf8_decode'를 완전히 제거 할 수 있습니다. 여기서는 아무 것도하지 않습니다. – deceze

+0

@deceze, 동의합니다.하지만 OP가 마음에 드는 것처럼 보입니다. 텍스트 파일에 이상한 문자가 올 수도 있습니다. –

+1

나는 당신이 그들이 잘못하고 있거나 오해하고있는 것에 대해 OP를 교육하려고한다고 생각했습니다 ...! :-P – deceze