-5

印刷できないデータがあります....

echo は機能しますが、printf は機能しません

文字列にデータがあり、simplexml_load_string も文字列を解析しません。

PHP の他のほとんどの文字列関数と同様に、printf が失敗する原因となっている、表示できず、序数の値を取得できないバイナリまたは非表示の文字があります。

明らかにこれはエンコーディングの問題ですが、それが何であるかを知る方法がわからないので、適切にエンコード/デコードできます。

$string = getStringFromDatabase();
printf($string);

...

Nothing is displayed

...

No errors, No Warnings, No Nothing

明らかにそこにデータがあります。すべての文字をループするとそこにあることがわかりますが、そこからどこに行くべきかわかりません。

[更新] 序数の値が典型的な ASCII 範囲外であるため、これは奇妙です。

ord($バッファ[$i]) = 1610

DLE と LF 文字の組み合わせです。どうやってそこにたどり着いたのか、理由はわかりません。または、どちらの側のデータも有効であり、その場所が非常に奇妙です。

<ここに問題のある文字>0,000 と考えてください

4

6 に答える 6

5

printf の定義:

int printf  ( string $format  [, mixed $args  [, mixed $...  ]] )

あなたの問題は、文字列を $format として渡していることだけではありませんか? 単に使用したり、文字列 AND aをprint提供printfしたりする必要はありませんか?$format$string

于 2009-04-23T20:25:11.560 に答える
2

echoは文字列を文字通り出力しますが、最初のパラメーターとして文字列をprintfに渡すと、フォーマットとして解釈されます。 % 文字が含まれている場合、これらが問題の原因である可能性があります。

これが機能する場合:

echo $foo 

次に、これを行う必要があります。

printf("%s", $foo);

文字列のすばやく汚れた 16 進ダンプを取得したい場合は、次のようなものを試してください。

$foo="fo \00 33jj";

$len=strlen($foo);
for ($i=0; $i<$len; $i++)
{
  printf("%02x ", ord($foo[$i]));
}

//outputs 66 6f 20 00 20 33 33 6a 6a
于 2009-04-23T20:20:00.793 に答える
1

私の下手に述べられた質問よりもはるかに悪い、面白くなく、賢明な非回答とコメントをありがとう。おそらく、多くの人は、考えるのではなく、答えるのが簡単な質問を探している担当者です。これも自由に反対票を投じてください。

実際に助けようとした人々に心から感謝します。

同じ問題に遭遇した方のために、ここに本当の答えがあります:

答えは、ランタイムからのバグであるマルチバイト文字です。文字列内でchr(16)を見つけて、空の文字列( "")に置き換えることで、この問題を回避できます。つまり、s / v/printf関数を操作するために必要な場合です。

于 2009-04-23T23:22:42.977 に答える
1

ここを見てください:http://ditio.net/2008/11/04/php-string-to-hex-and-hex-to-string-functions/そしておそらく16進表現を表示するだけで、悪い文字が来るかもしれませんアウト、しかし; 文字列を調べて、すべての印刷可能な文字 (ASCII > 31 および < 128) を新しい文字列にコピーし、その文字列を出力することもできます。

于 2009-04-23T20:21:08.717 に答える
0

試す

file_put_contents('tmp.txt', $string);

次に、16 進エディタにロードします。

于 2009-04-23T20:21:26.187 に答える
0

その時点で、文字列が空になる可能性があるため、試してみます。

echo "'" . $string . "'<br>";
于 2009-04-23T20:22:15.640 に答える