1

我正在转换如下句子:

Phasellus turpis, elit. Tempor et lobortis? Venenatis: sed enim!

到:

_________ ______, ____. ______ __ ________? _________: ___ ____!

使用:

utf8_encode(preg_replace("/[^.,:;!?¿¡ ]/", "_", utf8_decode($ss->phrase) ))

但我面临一个问题:谷歌正在将所有这些空词作为关键字进行索引。我想将原始字符串转换为 Google 不可见的内容,例如:

<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span>&nbsp;&nbsp;&nbsp;&nbsp</span>, ....   

使用:

.parent span { text-decoration:underline; }

也就是说,将单词包装在 span 标签内,用   替换单词的字符;并且保留特殊字符 .,:;!?¿¡ 和空格。

这可以使用正则表达式解决吗?实际上,我通过使用扫描字符串的每个字符的效率不高的循环来解决这个问题,但是我必须每页扫描很多句子。

4

2 回答 2

1

使用 preg_replace_callback 并让回调创建适当的替换。类似于(未经测试)的东西

function replacer($match) {
    return "<span>".str_repeat("&nbsp;",strlen($match[1]))."</span>";
}

// Note the addition of the () and the + near the end of the regex
utf8_encode(preg_replace_callback("/([^.,:;!?¿¡ ]+)/", "replacer", utf8_decode($ss->phrase) ))
于 2012-08-28T03:23:30.913 回答
0
$yourphrase = preg_replace('/([^\W]+)/si', '<span>$1</span>', $yourphrase);

这将用跨度包装所有“ _ ”字...

恕我直言,您在这里需要一个两步过程,首先您必须将字母转换为下划线(这已经很明显了?),其次您必须将“ _ ”-words 包裹在一个跨度中(使用我的正则表达式)。

于 2012-08-28T03:04:59.673 回答