PHP DOM 文档忽略追加 nodeValue 的空格

PHP DOM Document ignore whitespaces appending nodeValue

我正在通过 PHP 和 DOM 使用 MS Office Word 文档。我正在向我的文档添加段落。现在我必须将字符串的一部分设为粗体(它来自数据库,我无法更改它)。像这样:

The part of string is bold really.

我的工作:

    if(strpos($input, $search)) {
            $splitted  = explode($search, $input);
            $t1 = new DOMElement('t', " ".$splitted[0]." ", $this->ns);
            $t2 = new DOMElement('t', " ". $search ." ", $this->ns);
            $t3 = new DOMElement('t', " ".$splitted[1]." ", $this->ns);
}

然后我将此元素添加到文档中。但是我得到:

The part of string isboldreally.

它删除了 nodeValue 前后的空格。我试图强制添加空格(如上面的代码所示)。没有任何帮助。我能做什么?

尝试用“”字符串替换字符串中的空格。这相当于 HTML 相当于 "space" 可以这么说。

所以代替:

$t1 = new DOMElement('t', " ".$splitted[0]." ", $this->ns);

做:

$t1 = new DOMElement('t', " ".$splitted[0]." ", $this->ns);

您可以用   替换实际的 space 个字符,这不会换行,但会添加 space.

if(strpos($input, $search)) {
        $splitted  = explode($search, $input);
        $t1 = new DOMElement('t', ' '.$splitted[0].' ', $this->ns);
        $t2 = new DOMElement('t', ' '. $search .' ', $this->ns);
        $t3 = new DOMElement('t', ' '.$splitted[1].' ', $this->ns);
}

this 问题的回答解决了问题

解决方法是:

$t1 = new DOMElement('t', $splitted[0], $this->ns);
$t2 = new DOMElement('t', "\xC2\xA0". $search ."\xC2\xA0", $this->ns);
$t3 = new DOMElement('t', $splitted[1], $this->ns);

因为 是N个HTML实体。要添加 UTF-8 编码 non_breakable_space 我们必须使用 "\xC2\xA0"