如何在HTML中的每个句点后放置两个空格?

时间:2011-10-07 16:49:42

标签: html spaces

我需要在整个网站的每个句子的每个句点之后有两个空格(不要问)。

一种方法是在每个时段之后开始手动添加& nbsp& nbsp; 。这将需要几个小时。

我们不能只找到并替换每个句点,因为我们在PHP和其他有句号然后有空格的情况下有连接,但它不在句子中。

有没有办法做到这一点......一切仍然可以在Internet Explorer 6中运行?

[编辑] - 棘手的部分是,在代码中,有一些PHP行包括带有空格的点,如下所示:

<?php echo site_url('/css/' . $some_name .'.css');?>

我绝对不想要额外的空格来打破这样的线条,所以我很乐意在每个句点之后在所有P标签中添加两个可见空格

5 个答案:

答案 0 :(得分:6)

众所周知,HTML会折叠空白区域,但它只会用于显示。额外的空间仍在那里。因此,如果源材料是在每个周期之后用两个空格创建的,那么可以使所建议的一些替换方法可靠地工作 - 搜索&#34;周期 - 空间 - 空间&#34;并将其替换为更易于使用的东西,例如period-space-&amp; emsp14;。请注意,您不应该使用&amp; nbsp;因为它可以防止在边缘处正确包裹。 (如果你使用了正确的权利,只要你在空间之前使用,保证金变更就不会引人注意。)

您还可以在一个范围中包装每个句子并使用:after选择器添加一个空格并将其格式化为&#34;字间距&#34;。或者你可以直接在句子和样式中包装句子之间的空格。

我已经为博客写了一个javascript解决方案,它可以动态执行此操作,查找时空空间,并将其替换为更宽的样式空间。

但是,如果您的原始材料不包含此类内容,那么您将不得不研究句子边界检测算法(这不是那么简单),然后修改一个也不会绊倒PHP代码。

答案 1 :(得分:5)

您可以使用JavaScript分割方法或正则表达式,具体取决于文本的范围。

这是拆分方法:

var el = document.getElementById("mydiv");
if (el){
    el.innerText = el.innerText.split(".").join(".\xA0 ");   
}

测试用例:

  

Hello world。句点后插入空格。使用split方法。

结果:

  

你好世界。在句点之后插入空格。使用拆分方法。

答案 2 :(得分:3)

你有没有想过使用输出缓冲区? ob_start($callback)

未经测试,但如果你在任何输出之前坚持这个(或者是betetr,那么卸载该功能):

<?php
    function processDots($buffer)
    {
      return (str_replace(".", ".&nbsp;", $buffer));
    }

    ob_start("processDots");
?>

并将其添加到输入结尾:

<?php ob_end_flush(); ?>

可能正常工作:)

答案 3 :(得分:2)

如果您不反对“后处理”/“javascript”解决方案:

var nodes = $('*').contents().map(function(a, b) {
    return (b.nodeType === Node.TEXT_NODE ? b : null);
});
$.each(nodes, function(i,node){
    node.data = node.data.replace(/(\.\s)/g, '.\u00A0\u00A0');
});

为了简洁起见使用jQuery,但不是必需的。

P.S。我看到你的评论不是所有的时期和一个空间都被平等对待,但这是一样好。否则,你将需要更好/更防弹的方法。

答案 4 :(得分:1)

将类似这样的内容合并到您的PHP文件中:

<?php if (preg_match('/^. [A-Z]$/' || '/^.  [A-Z]$/')) { preg_replace('. ', '.&nbsp; '); } ?>

这使您可以像.spacespaceA-Z.spaceA-Z中那样搜索每个新句子的开头,然后将其替换为.&nbsp;space。 [注意:大写字母不会替换]