我有一些不会打印的数据......
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
答案 0 :(得分:5)
printf的定义:
int printf ( string $format [, mixed $args [, mixed $... ]] )
您的问题只是将您的字符串作为$ format传递?您不需要简单地使用print
或printf
使用$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>";