PHP printf没有打印,simplexml_load_string没有解析

时间:2009-04-23 20:09:00

标签: php simplexml printf

我有一些不会打印的数据......

echo工作,但不是printf

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

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

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

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

...

Nothing is displayed

...

No errors, No Warnings, No Nothing

显然那里有数据,我知道如果我循环遍历每一个字符,那么,我不会去那里。

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

ord($ buffer [$ i])= 1610

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

认为<冒犯char在这里> 0,000

6 个答案:

答案 0 :(得分:5)

printf的定义:

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

您的问题只是将您的字符串作为$ format传递?您不需要简单地使用printprintf使用$format字符串和$string吗?

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

感谢那些不好笑,明智的非答案和评论,这比我陈述得不好的问题要糟糕得多。我想,很多人都在寻找容易回答的问题而不必去思考。也可以随意投票。

真诚地感谢那些真正想要帮助的人。

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

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

答案 4 :(得分:0)

尝试

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

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

答案 5 :(得分:0)

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

echo "'" . $string . "'<br>";