PHPwordwrap
函数对特定的 ASCII 字符有一些了解。
在您的示例文本中,您不想让单引号内的空格换行,因此您可以用不间断空格替换空格。wordwrap
然后将不再包裹那些:
$nowrap = function ($string) {
return str_replace(' ', "\xA0", $string);
};
这是此类“nowrap”函数的 ASCII 版本。
由于它只需要部分应用于单引号部分,因此需要获取这些部分。这可以通过正则表达式轻松完成:
/'[^']+'/
然而,要将 nowrap 函数应用于匹配项,这需要一个辅助函数将第一个匹配组映射到输入值:
$first = function ($callback) {
return function ($params) use ($callback) {
return $callback($params[0]);
};
};
那么这可以很容易地应用:
$quotes = "/'[^']+'/";
$subject = preg_replace_callback($quotes, $first($nowrap), $subject);
然后,您可以安全地应用该wordwrap
示例wordwrap($subject, 31)
将给出以下输出的函数:
font-family: Arial,
'Helvetica Nueue',
'Times Roman'
如果您不想在输出中包含这些,也可以将它们转换回来。
完整代码:
$subject = "font-family: Arial, 'Helvetica Nueue', 'Times Roman'";
$nowrap = function ($string) {
return str_replace(' ', "\xA0", $string);
};
$first = function ($callback) {
return function ($params) use ($callback) {
return $callback($params[0]);
};
};
$quotes = "/'[^']+'/";
$subject = preg_replace_callback($quotes, $first($nowrap), $subject);
echo wordwrap($subject, 31);