заменить английские цитаты на немецкие цитаты - PullRequest
4 голосов
/ 03 июня 2011

есть ли способ реализовать немецкие кавычки (так называемый Gänsefüßchen)

„ („) and “ (“)

в функции для преобразования строк в английских кавычках, таких как

Я говорю "Привет"

до

Я говорю «Алло»

символ & bdquo должен применяться только в начале, а & ldquo в конце строки.

Ответы [ 5 ]

5 голосов
/ 03 июня 2011

Как насчет:

$input  = 'I say "Hallo".';
$output = preg_replace('/"(.*?)"/', '„$1“', $input);

Заменяет все четное количество кавычек на „“.

2 голосов
/ 03 июня 2011

Вот функция, протестированная и отлично работающая.

Примечание: применяется & 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, '&bdquo;', ($ghh+$y), 1);
        $y += 6;
        $it++;
    }

    $to=0;
    $i=1;
    $u=1;
    foreach($replace['two'] as $ghhd)
    {
        $text = substr_replace($text, '&rdquo;', ($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'));
2 голосов
/ 03 июня 2011

Вы можете сделать это также с помощью свойства CSS кавычки :

quotes: "„" "“" "‚" "‘";

Пример

2 голосов
/ 03 июня 2011

Вы можете сохранить замещающее «состояние», в котором вы находитесь. Сначала вы всегда заменяете кавычку на &bdquo, затем вы устанавливаете флаг, и если этот флаг равен true, вы заменяете кавычку на &rdquo, а затем вы поворачиваете флаг выключен. Повторите.

1 голос
/ 03 июня 2011

Если у вас всегда есть пробел перед "вы хотите заменить, вы можете сделать это так

str_replace ('\ "', '„', $ input);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...