【问题标题】:PHP - printf with json argumentsPHP - 带有 json 参数的 printf
【发布时间】:2018-01-18 09:18:56
【问题描述】:

我试图在 printf 编码的 json 数组中作为参数传递。但是,由于 json 数组的性质,它会在 printf 中产生错误:printf(): Too few arguments

有没有办法像这样在printf 方法中传递编码的 json 数组:

$val   = 10;
$min   = 0;
$max   = 100;
$steps = array( 1, 0.1, 0.01 );
$units = array( 'px', 'em', '%' );

printf(
    '<input type="range" value="%d" min="%d" max="%d" step="0.01" data-steps="%s" data-units="%s">',
    floatval( $val ),
    floatval( $min ),
    floatval( $max ),
    json_encode( $steps ),
    json_encode( $units )
);

谢谢

【问题讨论】:

  • 您能否深入了解您的数据和 php 环境?我没有收到一些测试数据的错误。
  • 为我工作3v4l.org/TOaXa(虽然 HTML 无效)
  • 希望数组是顺序索引的整数/浮点数:)
  • 你能显示你的变量的内容吗?他们里面有%吗?
  • 事实上,如果你在 printf 的参数中链接多个 json 是行不通的。我将更新我的示例。

标签: php arrays json printf encode


【解决方案1】:

您的代码很好,但它会生成这段 HTML

<input type="range" value="10" min="0" max="100" step="0.01"
       data-steps="[1,0.1,0.01]" data-units="["px","em","%"]">

由于 JSON 内容中包含双引号而无效。

您用于生成 HTML 的任何动态内容都必须经过正确的 HTML 编码。使用htmlspecialchars()json_encode() 返回的值进行编码,然后将它们传递给printf() 以生成有效的HTML:

$val   = 10;
$min   = 0;
$max   = 100;
$steps = array( 1, 0.1, 0.01 );
$units = array( 'px', 'em', '%' );

printf(
    '<input type="range" value="%d" min="%d" max="%d" step="0.01" data-steps="%s" data-units="%s">',
    floatval( $val ),
    floatval( $min ),
    floatval( $max ),
    htmlspecialchars( json_encode( $steps ) ),
    htmlspecialchars( json_encode( $units ) )
);

floatval() 返回的值不需要这种处理,因为它们不包含 HTML 特殊字符。

【讨论】:

  • 感谢您的回答。我接受你的回答,但实际上我的问题不是因为这个。
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多