2012-09-26 23 views
2

我想缩小HTML字符串,但也包装在某些字符数的文本。所以当HTML字符串包含嵌入的CSS时,我需要一个特殊的功能。我已经使用PHP函数“换行”,但双引号(“)和单引号('),它打破了显示器内的文字换行尝试。例如,如果我们有以下字符串:在Word中自动换行,但不包括在引号内的字符串

font-family: Arial, 'Helvetica Nueue', 'Times Roman' 

现在,如果我们做的说,31日这一个换行,就会变成:

font-family: Arial, 'Helvetica 
Nueue', 'Times Roman' 

并加载时,这会导致浏览器曲解CSS串

有谁知道如何或写一个换行功能当文本包含在引号内时不会换行(单个或双)?

谢谢!

UPDATE

对不起,问的只是代码。这是我想要做的事情(我目前正在编程):

循环浏览CSS字符串并抓取中间字符串的块; }或{如果它关闭了中断限制,则将这些子字符串添加到数组中。循环完成后,使用“\ n”作为粘合剂将数组分解为字符串。

任何人都有更好的/不同的方法?

+0

你给的例子是错误的。 PHP的'wordwrap'函数并不像你所说的那样行为正常。你到目前为止还尝试过什么?请发布您的代码。 – hakre

+0

@hakra - 你是对的,我已经更新了我的问题。我还没有写任何东西......如果别人已经解决了这个问题,不想重新发明轮子。 – thiesdiggity

+0

该CSS片段是你需要关心的。还是会有更多的CSS语法,如双引号,括号等等? – hakre

回答

1

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); 
0

如果需要通过电子邮件发送此HTML你应该使用之后chunk_split()要么quoted_printable_encode()base64_encode()

两种方法都将确保行不超过76个字符。

不要忘了还要设置合适的Content-Transfer-Encoding MIME标头,或者quoted-printablebase64

+0

这是一个有趣的方法,但不幸的是我不确定ESP将如何发送电子邮件,这就是为什么我更喜欢它是直的HTML。 – thiesdiggity

+0

什么是ESP?我假设你自己发送电子邮件,但通常电子邮件发送提供商已经应用了正确的包装。 –

+0

ESP =电子邮件服务提供商 – hakre

相关问题