【问题标题】:Concatenation in PHP: missing white spacePHP中的连接:缺少空格
【发布时间】:2012-11-02 16:14:04
【问题描述】:

我正在做一个像这样的简单连接$string = $a.' '.$b.' '.$c 而$b 是一个可能为空的变量。因此,如果$b 为空,那么$string = $a.' '.' '.$c 是否会为空,并且在 MySQL 中似乎是这样。
但是,当我回显它时,当$b 为空时,$string 在 $a 和 $c 之间只有一个空格,一个空格神秘地丢失了。
有人知道这里发生了什么吗?

附加说明:我这样做是因为我忘记在 60 小时解析之前检查 $middlename 是否为空。所以现在在我的数据库中,有格式正确的名称,如adam c. johnson,以及格式不正确的名称,如adam johnson,名字和姓氏之间有两个空格。如果有一种方法可以消除那些不正确名称中的一个额外空格,它也可以解决我的问题。

评论代码:

$name = $list["firstname"].' '.$list["middlename"].' '.$list["lastname"];
if (strlen($name)>20) {
   //echo $name."<br>";
   $name_cut=substr($name,0,20);
   $stmt= $conn->stmt_init();
   $sql = 'UPDATE ? SET name=replace(name, \'?\', \'?\');';
   if ($stmt->prepare($sql)) {
      $stmt->bind_param('sss', $table, $name_cut, $name);
      $stmt->execute();
   }
}

【问题讨论】:

  • 您是否正在回显到 Web 浏览器?网络浏览器不会显示超过一个连续的空格。
  • 我们可以看看你的一些 PHP 代码吗?
  • $name = $list["firstname"].' '.$list["middlename"].' '.$list["姓氏"]; if (strlen($name)>20) { //echo $name."
    "; $name_cut=substr($name,0,20); $stmt= $conn->stmt_init(); $sql = '更新?设置name=replace(name,\'?\',\'?\');'; if ($stmt->prepare($sql)) { $stmt->bind_param('sss', $table, $name_cut, $name); $stmt->执行(); }
  • 对不起,我不知道如何在评论中格式化它。基本上我要做的是用数据库中正确的全名替换被剪切的名称。我之前为字段“名称”设置了错误的长度。
  • 因为你有一个简单的“两个空格”替换为“一个空格”,REPLACE function seems fitting。

标签: php mysql string-concatenation


【解决方案1】:

空白处理在http://www.w3.org/TR/html4/struct/text.html#h-9.1 中定义(HTML4 规范——它似乎不在 HTML5 规范中,尽管我认为它遵循相同的规则)。

特别是,用户代理在生成输出字间距时应该折叠输入空白序列。即使在没有语言信息的情况下也可以而且应该这样做

如果要打印实际空间,请将要打印的内容放在&lt;pre&gt; 中,white-space: pre 样式的元素,或使用不间断空格实体 (&amp;nbsp;) 而不是空间。

【讨论】:

    【解决方案2】:

    检查 $list["middlename"] 是否为 NULL

    if ($list["middlename"]==NULL){ 
      $ name = $list["firstname"].' '.$list["lastname"];
    }
    else{
         $ name = $list["firstname"].' '.$list["middlename"].' '.$list["lastname"];
    }
    if (strlen($name)>20) {
       //echo $name."<br>";
       $name_cut=substr($name,0,20);
       $stmt= $conn->stmt_init();
       $sql = 'UPDATE ? SET name=replace(name, \'?\', \'?\');';
       if ($stmt->prepare($sql)) {
          $stmt->bind_param('sss', $table, $name_cut, $name);
          $stmt->execute();
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2020-01-04
      • 2020-10-14
      相关资源
      最近更新 更多