我需要在整个网站的每个句子的每个句点之后有两个空格(不要问)。
一种方法是在每个时段之后开始手动添加& nbsp& nbsp; 。这将需要几个小时。
我们不能只找到并替换每个句点,因为我们在PHP和其他有句号然后有空格的情况下有连接,但它不在句子中。
有没有办法做到这一点......一切仍然可以在Internet Explorer 6中运行?
[编辑] - 棘手的部分是,在代码中,有一些PHP行包括带有空格的点,如下所示:
<?php echo site_url('/css/' . $some_name .'.css');?>
我绝对不想要额外的空格来打破这样的线条,所以我很乐意在每个句点之后在所有P标签中添加两个可见空格。
答案 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(".", ". ", $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('. ', '. '); } ?>
这使您可以像.spacespaceA-Z
或.spaceA-Z
中那样搜索每个新句子的开头,然后将其替换为. space
。 [注意:大写字母不会替换]