есть ли способ реализации немецких котировок (так называемый «Gänsefüßchen»)
„ („) and “ (“)
в функции для преобразования английских строк, например
Я говорю «Hallo»
в
Я говорю «Hallo»
& bdquo должен применяться только в начале, & ldquo в конце строки.
Вот функция, проверена и работает нормально.
Примечание: & bdquo применяется только в начале, & rdquo только в конце строки. (решение hsz не соответствует этому правилу)
function germanquotes($text){ $size = strlen($text); $i=0; $replace = array(); $replace['one'] = array(); $replace['two'] = array(); while($i < $size) { if($text[$i] == '"') { if($text[$i-1] == " " || empty($text[$i-1])) { $replace['one'][] = $i; } elseif($text[$i+1] == " " || empty($text[$i+1])) { $replace['two'][] = $i; } } $i++; } $y = 0; $it = 0; foreach($replace['one'] as $ghh) { $text = substr_replace($text, '„', ($ghh+$y), 1); $y += 6; $it++; } $to=0; $i=1; $u=1; foreach($replace['two'] as $ghhd) { $text = substr_replace($text, '”', ($ghhd-1+$to+((8*$i)-($u*1))), 1); $i++; $u +=2; $to +=6; } return $text; }
Контрольная работа:
echo(germanquotes('I am "glad" to write "functions" for "stackoverflow" users'));
Как насчет:
$input = 'I say "Hallo".'; $output = preg_replace('/"(.*?)"/', '„$1“', $input);
Он заменяет все равно количество котировок на „“
.
Вы можете сохранить заменяющее «состояние», в котором вы находитесь. Сначала вы всегда заменяете цитату &bdquo
, тогда вы устанавливаете флаг, и если этот флаг является истинным, вы заменяете цитату с помощью &rdquo
а затем вы отключите флаг. Повторение.
Вы можете сделать это также с помощью CSS- котировок :
quotes: "„" "“" "‚" "'";
пример
Если у вас всегда есть промежуток времени, который вы хотите заменить, вы можете сделать это так
str_replace ('\ "', '' ', $ input);