PHP wordwrap
函数对特定的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)
会给FOL低输出:
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);
你给的例子是错误的。 PHP的'wordwrap'函数并不像你所说的那样行为正常。你到目前为止还尝试过什么?请发布您的代码。 – hakre
@hakra - 你是对的,我已经更新了我的问题。我还没有写任何东西......如果别人已经解决了这个问题,不想重新发明轮子。 – thiesdiggity
该CSS片段是你需要关心的。还是会有更多的CSS语法,如双引号,括号等等? – hakre