1

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

附加说明:我这样做是因为我忘记在 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();
   }
}
4

2 回答 2

3

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

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

如果要打印实际空间,请将要打印的内容放入<pre>带样式的元素中white-space: pre,或者使用不间断的空格实体 ( &nbsp;) 代替空格。

于 2012-11-02T16:20:48.833 回答
1

检查 $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();
   }
}
于 2012-11-02T16:42:21.623 回答