|
30 | 30 | define('PINYIN_NAME', 16);
|
31 | 31 | define('PINYIN_KEEP_NUMBER', 32);
|
32 | 32 | define('PINYIN_KEEP_ENGLISH', 64);
|
33 |
| -define('PINYIN_KEEP_PUNCTUATION', 128); |
| 33 | +define('PINYIN_UMLAUT_V', 128); |
| 34 | +define('PINYIN_KEEP_PUNCTUATION', 256); |
34 | 35 |
|
35 | 36 | /**
|
36 | 37 | * Class Pinyin
|
@@ -339,15 +340,22 @@ protected function formatTone($pinyin, $option = \PINYIN_NO_TONE)
|
339 | 340 | {
|
340 | 341 | $replacements = array(
|
341 | 342 | 'üē' => array('ue', 1), 'üé' => array('ue', 2), 'üě' => array('ue', 3), 'üè' => array('ue', 4),
|
342 |
| - 'ā' => array('a', 1), 'ē' => array('e', 1), 'ī' => array('i', 1), 'ō' => array('o', 1), 'ū' => array('u', 1), 'ǖ' => array('v', 1), |
343 |
| - 'á' => array('a', 2), 'é' => array('e', 2), 'í' => array('i', 2), 'ó' => array('o', 2), 'ú' => array('u', 2), 'ǘ' => array('v', 2), |
344 |
| - 'ǎ' => array('a', 3), 'ě' => array('e', 3), 'ǐ' => array('i', 3), 'ǒ' => array('o', 3), 'ǔ' => array('u', 3), 'ǚ' => array('v', 3), |
345 |
| - 'à' => array('a', 4), 'è' => array('e', 4), 'ì' => array('i', 4), 'ò' => array('o', 4), 'ù' => array('u', 4), 'ǜ' => array('v', 4), |
| 343 | + 'ā' => array('a', 1), 'ē' => array('e', 1), 'ī' => array('i', 1), 'ō' => array('o', 1), 'ū' => array('u', 1), 'ǖ' => array('yu', 1), |
| 344 | + 'á' => array('a', 2), 'é' => array('e', 2), 'í' => array('i', 2), 'ó' => array('o', 2), 'ú' => array('u', 2), 'ǘ' => array('yu', 2), |
| 345 | + 'ǎ' => array('a', 3), 'ě' => array('e', 3), 'ǐ' => array('i', 3), 'ǒ' => array('o', 3), 'ǔ' => array('u', 3), 'ǚ' => array('yu', 3), |
| 346 | + 'à' => array('a', 4), 'è' => array('e', 4), 'ì' => array('i', 4), 'ò' => array('o', 4), 'ù' => array('u', 4), 'ǜ' => array('yu', 4), |
346 | 347 | );
|
347 | 348 |
|
348 | 349 | foreach ($replacements as $unicode => $replacement) {
|
349 | 350 | if (false !== strpos($pinyin, $unicode)) {
|
350 |
| - $pinyin = str_replace($unicode, $replacement[0], $pinyin).($this->hasOption($option, PINYIN_ASCII_TONE) ? $replacement[1] : ''); |
| 351 | + $umlaut = $replacement[0]; |
| 352 | + |
| 353 | + // https://zh.wikipedia.org/wiki/%C3%9C |
| 354 | + if ($this->hasOption($option, \PINYIN_UMLAUT_V) && $umlaut == 'yu') { |
| 355 | + $umlaut = 'v'; |
| 356 | + } |
| 357 | + |
| 358 | + $pinyin = str_replace($unicode, $umlaut, $pinyin).($this->hasOption($option, PINYIN_ASCII_TONE) ? $replacement[1] : ''); |
351 | 359 | }
|
352 | 360 | }
|
353 | 361 |
|
|
0 commit comments