-5

我有一些数据不会打印出来......

echo 有效,但 printf 无效

字符串中有数据,simplexml_load_string 也不会解析字符串。

有一些二进制或不可见字符我看不到,也无法获得序数值,导致 printf 以及 PHP 中的大多数其他字符串函数失败。

显然这是一个编码问题,但是,我不知道如何找出它是什么,以便我可以正确编码/解码它。

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

...

Nothing is displayed

...

No errors, No Warnings, No Nothing

显然那里有数据,如果我遍历每个字符,我知道它就在那里,但是,我不知道从那里去哪里。

[更新] 这很奇怪,因为序数值超出了典型的 ASCII 范围。

ord($buffer[$i]) = 1610

它是 DLE 和 LF 字符的组合。不知道它是如何到达那里的或为什么。或者它应该是什么,两边的数据都是有效的,而且它的位置很奇怪。

认为 <此处有问题的字符>0,000

4

6 回答 6

5

printf的定义:

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

您的问题不只是您将字符串作为 $format 传递吗?您不需要简单地使用print或提供printf字符串$formatAND a$string吗?

于 2009-04-23T20:25:11.560 回答
2

echo将按字面意思输出一个字符串,但是如果您将字符串作为第一个参数传递给printf,它将被解释为格式 - 如果它包含 % 字符,这些可能是您的问题的根源。

如果这有效:

echo $foo 

那么应该这样:

printf("%s", $foo);

如果您想获得一个快速而肮脏的十六进制转储字符串,请尝试类似

$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

看这里:http ://ditio.net/2008/11/04/php-string-to-hex-and-hex-to-string-functions/也许只是显示十六进制表示,坏字符可能会来出,但是;您也可以只浏览字符串并将所有可打印字符(ASCII > 31 和 < 128)复制到一个新字符串中,然后打印出该字符串。

于 2009-04-23T20:21:08.717 回答
1

感谢那些比我说得不好的问题更糟糕的非有趣、明智的非答案和评论。我想,很多人都在寻找简单的问题来回答而不是思考。也可以随意投反对票。

真诚地感谢那些真正试图提供帮助的人。

对于那些遇到同样问题的人,这里是真正的答案:

答案是一个多字节字符,它是运行时的一个错误。您可以通过在字符串中查找 chr(16) 并将其替换为空字符串 ("") 来解决此问题。也就是说,如果您需要它与 s/v/printf 函数一起使用。

于 2009-04-23T23:22:42.977 回答
0

尝试

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

然后将其加载到十六进制编辑器中。

于 2009-04-23T20:21:26.187 回答
0

那时我会尝试,因为字符串可能为空:

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