is there a way to implement german quotes (so-called 'Gänsefüßchen')
„ („) and “ (“)
in a function to convert english-quoted strings like
I say "Hallo"
to
I say „Hallo“
the &bdquo s开发者_如何学JAVAhould only apply at the beginning, the &ldquo at the end of an string.
What about:
$input = 'I say "Hallo".';
$output = preg_replace('/"(.*?)"/', '„$1“', $input);
It replaces all even amount of quotes into „“
.
Here is the function, tested and works fine.
Note: the &bdquo applies only at the beginning, the &rdquo only at the end of an string. (hsz's solution isn't following that rule)
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;
}
Test:
echo(germanquotes('I am "glad" to write "functions" for "stackoverflow" users'));
You could store the replacement "state" you are in. First you always replace a quote with &bdquo
, then you set a flag and if that flag is true, you replace a quote with &rdquo
and then you turn the flag off. Repeat.
You can do it also with CSS property quotes:
quotes: "„" "“" "‚" "‘";
Example
Asuming you always have a space infront of the " you want to replace you could do it like this
str_replace (' \"', ' „', $input);
精彩评论