0

以下のコードを参照してください:

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIg
PSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+
IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

これは単純なphpコードであり、以下のURLを使用してbase64文字列をデコードできます:
http ://www.base64decode.org/

この例のbase64_decode()関数がその仕事をできない理由。出力は次のようになります。

"; eval("\$str = \"$str\";"); echo $str; ?>  

それ以外の :

<?php
$string = "beautiful";
$time = "winter";

$str = 'This is a $string $time morning!';
echo $str. "<br />";

eval("\$str = \"$str\";");
echo $str;
?> 

問題は何ですか?大きなコードに対してどのように修正できますか?

編集:
出力の目に見えない部分があり、ページソースで見つけることができます。
しかし、なぜこの反応があるのでしょうか?
前もって感謝します

4

5 に答える 5

5

問題は、それをHTMLとして表示していることです。ソースを確認するか、ヘッダーを渡してブラウザにテキストとして解釈させると、全体がわかります。

于 2012-05-17T18:39:59.077 に答える
0

それらの改行を追加しましたか?

このようなコードを使用する場合:

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIgPSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

それはうまく機能します。

ただし、文字列に改行( "\ n")文字を追加しました。複数のラインでブレーキをかけるため。それが機能しない理由です。

複数のラインでブレーキをかける必要がある場合は、次のことを行う必要があります。

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIg'.
       'PSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+'.
       'IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

これらの改行を文字列内に保持したい場合、たとえば、すでにワードラップされている(通常は1行あたり70〜80文字)大きなbase64エンコード文字列がある場合は、次のように実行できます。

$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpb
        nRlciI7DQoNCiRzdHIgPSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW
        9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+IjsNCg0KZXZhbCgiXCR
        zdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
$str = implode('', preg_split('/\s*/', $str));
echo base64_decode($str);
于 2012-05-17T19:11:33.977 に答える
0

evalステートメントは、コマンドを実行して文字列を返します。実際に必要なのは、eval内でevalを実行することです。これは、ちょっとばかげています。

于 2012-05-17T18:41:42.290 に答える
0

出力のソースを表示してみてください-完全なコンテンツがそこにあると確信していますが、ブラウザはそれをHTMLとして読み取ろうとしています。

base64でエンコードされたPHPスクリプトをエコーし​​ても、魔法のように評価されることはありません。あなたはそれを自分でしなければなりません:

eval(base64_decode($str));
于 2012-05-17T18:41:42.450 に答える
0

これを試してみてください。

$bodyData = strtr($str, array('-' => '+', '_' => '/'));
$messagesDetail['body'] = base64_decode($bodyData);
于 2019-11-18T13:37:27.097 に答える