【问题标题】:What does %S mean in PHP, HTML or XML?PHP、HTML 或 XML 中的 %S 是什么意思?
【发布时间】:2012-07-22 07:40:50
【问题描述】:

我正在查看Webmonkey's PHP and MySql Tutorial, Lesson 2。我认为这是一个php文字。 %s 是什么意思?它至少在前几个代码块中的 while 循环中的 print_f() 函数内。

printf("<tr><td>%s %s</td><td>%s</td></tr>n", ...

【问题讨论】:

    标签: php html xml string-literals


    【解决方案1】:

    以 % 符号开头的 printf 或 sprintf 字符是占位符(或标记)。它们将被作为参数传递的变量替换。

    示例:

    $str1 = 'best';
    $str2 = 'world';
    
    $say = sprintf('Tivie is the %s in the %s!', $str1, $str2);
    echo $say;
    

    这将输出:

    Tivie 是世界上最好的!

    注意:还有更多的占位符(%s 表示字符串,%d 表示十进制数等...)


    订单:

    传递参数的顺序很重要。如果您将 $str1 与 $str2 切换为

    $say = sprintf('Tivie is the %s in the %s!', $str2, $str1); 
    

    它会打印出来

    “Tivie 是世界上最好的!”

    但是,您可以像这样更改参数的阅读顺序:

    $say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1);
    

    这将正确打印句子。


    另外,请记住 PHP 是一种动态语言,不需要(或支持)显式类型定义。这意味着它会根据需要处理变量类型。在 sprint 中,这意味着如果您将“字符串”作为数字占位符 (%d) 的参数传递,该字符串将被转换为可能产生奇怪结果的数字 (int, float...)。这是一个例子:

    $onevar = 2;
    $anothervar = 'pocket';
    $say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar);
    echo $say;
    

    这将打印出来

    我的 0 中有 2 块巧克力。

    更多阅读PHPdocs

    【讨论】:

    • 我认为您的示例以及 Ned 的解释是一个相当可靠的答案。问:如果我写sprintf('Tivie is the %s in the %s!', $str2, $str2);,它会回显“Tivie is the world in the best!”吗?
    • 它将输出“Tivie is the world in the world”,因为 str2 = world,
    • 万岁错字。我被它逗笑了。所以%strn 返回%s[n] 的值,可以这么说吗?使用相同的表示法,%s %s 返回 %s[0] %s[1]? 的值
    • 是的。尽管您可以随意命名变量,但重要的是传递它们的顺序。第一个占位符取第一个传递参数的值,第二个占位符取第二个参数的值,依此类推。 % 符号后面的字母告诉 sprint 它是什么类型的变量(整数、字符串等...)
    • 嗯...这里有一个列表en.wikipedia.org/wiki/…
    【解决方案2】:

    printf 中,%s 是要插入到字符串中的数据的占位符。 printf 的额外参数是要插入的值。它们在位置上与占位符相关联:第一个占位符获取第一个值,第二个占位符获取第二个值,依此类推。

    【讨论】:

    • +1 - 顺便说一句,正确的术语是字符串插值。
    • 显然与 C 的 printf 语法相同。
    【解决方案3】:

    %s 是一个类型说明符,在 %s 的情况下将被替换为有价值的值(字符串)。

    除了%s,您还可以使用其他specifiers,最受欢迎的有:

    d - 参数被视为整数,并显示为(有符号的)十进制数。

    f - 参数被视为浮点数,并显示为浮点数(语言环境 知道)。

    s - 参数被视为并呈现为字符串。

    【讨论】:

      【解决方案4】:
      $num = 5; 
      $location = 'tree';
      
      $format = 'There are %d monkeys in the %s'; 
      echo sprintf($format, $num, $location); 
      

      将输出:“树上有 5 只猴子。”

      【讨论】:

      • 感谢您的编辑,内德。我进行了四次编辑,但仍然无法正常工作。 Markdown 一定搞砸了。
      【解决方案5】:

      printf()sprintf() 函数将格式化字符串写入变量。 这是语法:

      sprintf(format,arg1,arg2,arg++)
      

      格式:

      • %% - 返回百分号
      • %b - 二进制数
      • %c - 根据 ASCII 值的字符
      • %d - 有符号十进制数(负数、零或正数)
      • %e - 使用小写的科学记数法(例如 1.2e+2)
      • %E - 使用大写的科学记数法(例如 1.2E+2)
      • %u - 无符号十进制数(等于或大于零)
      • %f - 浮点数(本地设置感知)
      • %F - 浮点数(不支持本地设置)
      • %g - %e 和 %f 中的较短者
      • %G - %E 和 %f 中的较短者
      • %o - 八进制数
      • %s - 字符串
      • %x - 十六进制数(小写字母)
      • %X - 十六进制数(大写字母)

      arg1

      • 要在格式中的第一个 %-sign 处插入的参数 字符串..(必填)

      arg2

      • 要在第二个 %-sign 处插入的参数,格式为 细绳。 (可选)

      arg++

      • 要在第三个、第四个等处插入的参数。%-sign in 格式字符串(可选)

      示例 1:

      $number = 9;
      $str = "New York";
      $txt = sprintf("There are approximately %u million people in %s.",$number,$str);
      echo $txt;
      

      这将输出:

      New York 大约有 9 百万人。

      arg1arg2arg++ 参数将插入主字符串的百分号 (%) 处。此功能“逐步”工作。在第一个 % 符号处插入 arg1,在第二个 % 符号处插入 arg2,依此类推。

      注意:如果 % 符号多于参数,则必须使用 占位符。在 % 符号之后插入一个占位符,由 参数编号和“\$”。再看一个例子:

      示例 2

      $number = 123;
      $txt = sprintf("With 2 decimals: %1\$.2f
      <br>With no decimals: %1\$u",$number);
      echo $txt;
      

      这将输出:

      带 2 位小数:123.00
      没有小数:123

      另一个需要记住的重要提示是:

      使用printf()sprintf() 函数,转义字符不是 反斜杠 '\' 而不是 '%'。 IE。要打印“%”字符,您需要 自己逃脱它:

      printf('%%%s%%', 'Nigeria Naira');

      这将输出:

      %尼日利亚奈拉%

      随意探索官方PHP Documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 2020-06-06
        • 1970-01-01
        • 2011-05-31
        • 2022-06-10
        • 2011-09-27
        • 2011-06-25
        相关资源
        最近更新 更多