4

我正在开发一个网站(Wordpress、HTML、CSS、jQuery),其内容是用葡萄牙语编写的。有很多带有连字符的单词,如果它们出现在行尾,就会被分成两半。这是一个例子:

Batata frita pála-
pála, é uma tara de
sabor.

有没有一种方法可以检测一个单词是否连字符,如果它位于行尾,则不将其分成两半?理想的情况是整个单词都转到下一行,但如果不可能,我愿意接受建议。像这样的东西:

Batata frita
pála-pála, é uma
uma tara de sabor.

对我来说,比知道解决方案更重要的是理解它。提前致谢。

编辑

该网站是在CMS平台上开发的,内容由客户端插入,是动态的。我不能指望客户自己使用不间断的连字符(HTML ‑)。

4

6 回答 6

7

用不间断连字符替换所有连字符。它与不间断空格 (  ) 相同,只是它是一个连字符。

于 2012-07-16T14:45:30.273 回答
5

如果您谈论的是浏览器自己的文本/HTML 内容包装(而不是正则表达式拆分),我可以想到两种方法来做到这一点:

  • 使用不间断连字符 (HTML ‑) 而不是常规连字符
  • 添加<span style="white-space: nowrap">您不想包装的部分
于 2012-07-16T14:44:18.003 回答
1

正如其他人所建议的那样,您需要用不间断的连字符替换常规连字符。

这可以由 CMS 自动完成。

对于 Wordpress,您可以在主题中添加内容过滤functions.php

function non_breaking_hyphens($content){
    return str_replace('-', '&#8209;', $content);
}

add_filter('the_content', 'non_breaking_hyphens');

这将在帖子正文发送到浏览器之前应用所需的搜索替换。

于 2012-07-16T14:56:16.697 回答
0

有几种可能性:

<nobr>pála-pála</nobr>
<span class=nobr>pála-pála</span>
pála&#8209;pála

各有利弊(见http://www.cs.tut.fi/~jkorpela/html/nobr.html)。

无论您选择哪种方法,您都可以尝试在服务器端或客户端自动化流程。由于这或多或少是展示性的,我认为它可以通过客户端 JavaScript 来完成。我建议采用类似于 Firefox 的策略:可以分割长连字符的化合物(它通常会改进格式),但如果连字符两边的字符少于 4 个,请防止分割。

于 2012-07-16T18:14:42.063 回答
0

关于问题中的更新:

我看到了三种可能的解决方案,但没有一个简单的解决方案:)

  1. 使用正则表达式解析内容,如果子字符串在 内>....<,则使用str_replace或包裹在<nobr>=> 中容易出错且复杂
  2. 使用内容构建 DOMDocument,遍历 DOM 并使用您选择的非破坏性解决方案处理每个 textNode。=> 服务器资源可能很昂贵
  3. 客户端:我见过的大多数 WYSIWYG 都有用于扩展的 API。添加一个插入不间断连字符的按钮或添加一个替换为的 onKeyUp 侦听-&#8209;
于 2012-07-23T13:08:46.253 回答
0

如果您因为在 iOS 移动浏览器中检查您的网站而面临这一挑战,您必须放置更强大的代码。例如,Apple iPhone 将重排文本,但也会自行决定使用连字符。所以,这样做可以完全消除这个问题:

.yourclass{
    -moz-hyphens: none;
    -ms-hyphens: none;
    -webkit-hyphens: none;
    hyphens: none;
}
于 2016-01-04T19:49:59.477 回答