我相信DOMPDF在确定如何分割一行时使用了相当有限的字符集。现在它只会在破折号或空格处分割一行。因此,像你样本中的URL将超出容器的宽度。DOMPDF不知道如何分割它。
从dompdf v0.6.0开始,您可以对文本进行样式设置,以便单词在任何字符处断开,例如:
<span style="word-wrap: break-word;">http://example.com/really/long/.../url</span>
如果只是在特定字符(例如/
)处断开,那么这种方法并不完美。如果您熟悉代码,可以更优雅地解决这个问题。打开文本重排类并修改分割行的正则表达式。正则表达式如下:
preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE)
修改该代码,包括您认为能够产生良好换行效果的任何额外字符。例如,您可以在?、&甚至/上分割URL(如果您预计文本中会有非常长的URL):
$words = preg_split('/([\s-\?\&\/]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$words = preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$words = preg_split('/([\s-\?\&\/]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
同时替换以下行
$words = array_flip(preg_split("/[\s-]+/u",$str, -1, PREG_SPLIT_DELIM_CAPTURE));
使用
$words = array_flip(preg_split('/([\s-\?\&\/]+)/u', $str, -1, PREG_SPLIT_DELIM_CAPTURE));