使用PHP自动替换带有重音字母的开放引号

时间:2016-02-10 21:23:33

标签: php quote

如何将单词末尾的单个开放引号转换为正确的重音单词,例如:

"Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica"

必须成为

"Questa città di nome 'ROMA' è davvero bella poiché molto antica"

4 个答案:

答案 0 :(得分:2)

第二种解决方案

发布第二个答案,因为其他答案没有考虑到口音是严重的还是严重的以及所提及的其他特殊情况here

This PHP function确实考虑了变音符号类型,其目的是查看最后两个字符的字母和元音组合,例如:

以一个元音结尾的单词:

  • ... TA
  • ......他
  • tè(注意'茶'的例外)
  • ... NI
  • ...没有

以两个元音结尾的单词:

  • ... IA
  • ...即
  • ... IO
  • ... IU

该功能确实有一些限制,即:

  • 不处理da',敢于使用的形式
  • 不处理di',命令式形式的可怕

最后一些剩余的假设

  • 假设跳过开头和结尾引号括起的字词

或许OP可以详细说明如何在数据集中定义这些规则。

答案 1 :(得分:0)

我建议你像这样使用preg_replace_callback函数:

$text = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica";

$callable = function($matches) {
    $substitution = [
        'a' => 'à',
        'e' => 'è'
    ];

    $replaced = $matches[2];
    $replaced[strlen($replaced) - 1] = $substitution[$replaced[strlen($replaced) - 1]];
    return $matches[1] . $replaced . $matches[3];
};

$result = preg_replace_callback( "/(^| )([A-Za-z]+)'( |$)/", $callable, $text);

echo $result;

答案 2 :(得分:0)

所以你可以用正则表达式捕获正确的字符,然后用与重音字符相对应的html字符替换它们。

$subject = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica"; $pattern = " /([\s]\w*) #Captures the word with accent letter ([aeiouyAEIOUY])\' #Captures the accent letter with the accent character. /x"; $replacement = "$1&$2acute"; echo preg_replace($pattern, $replacement, $subject);

输出将是

Questa cittá di nome 'ROMA' é davvero bella poiché molto antica

(现在感谢@Max正则表达式并稍加调整)

如果您正在寻找更好的方法,那么使用'作为指标,因为这仅限于使用强调重音,您应该查看@flacle答案。

答案 3 :(得分:-1)

不确定您的编程语言或应用程序是什么,但也许像PHP的字符串替换函数会做什么? http://php.net/manual/en/function.str-replace.php - 当然假设您有一组有限的替代品。