was dedlfix oben geschrieben hat unterschreibe ich mit. Da gibt es einen Haufen Kontext-Wechsel, der kaum noch zu durchschauen ist. Auch das regex-Basteln will gelernt sein....
Du hast:
"
Du kannst das in einen String packen mit
A)
'\"' - der erste Backslash maskiert den zweiten.
ODER
B)
"\"" - der erste Backlslash maskiert den zweiten, der zweite das doppelte Anführungszeichen - das ja sonst den String begrenzen würde.
Ich habe die regsearch mit '/\(")|\\(')/' gebaut weil die Quotas ja ausgegeben werden sollen. Die geklammerten Ausdrücke werden dann in $1 in $99 gespeichert.
Nur für den Regex muss da nochmals maskiert werden.
Wenn Du schon partout einen (teuren) regex verwenden willst, warum nicht in einem Schritt?:
<?php
$str='foo\\\'bar\\"';
echo 'Kontrolle vor Ersetzen : '. $str , " <br>\n";
$regsearch='/\\\(")|\\\\(\')/';
$str=preg_replace ($regsearch , '$1$2', $str);
echo 'Kontrolle nach Ersetzen: [/\\\\\(")|\\\\\\\\(\'/)] : ', $str, " <br>\n";
?>
Ausgabe:
Kontrolle vor Ersetzen : foo'bar" <br>
Kontrolle nach Ersetzen: [/\(")|\\('/)] : foo'bar" <br>
Das kann man noch interessanter haben (wenn man es richtig machen will) und auch noch jeweils noch doppelte Backlashs durch einfache ersetzen will... einfacher ist das aber wohl mit:
<?php
$str='foo\\\'bar\\"baz\\\\potz\\\\\\\\blitz\\\\\\\\\\\\donnerwerter\\\\\\\\\\\\\\\\';
echo 'Kontrolle vor Ersetzen : '. $str , " <br>\n";
$ar_search=array('\\\\', "\\'", '\\"');
$ar_replace=array('\\',"'", '"');
$str=str_replace($ar_search,$ar_replace,$str);
echo 'Kontrolle nach Ersetzen mit str_replace: ', $str, " <br>\n";
?>
Ausgabe:
Kontrolle vor Ersetzen : foo\'bar\"baz\\potz\\\\blitz\\\\\\donnerwerter\\\\\\\\ <br>
Kontrolle nach Ersetzen mit str_replace: foo'bar"baz\potz\\blitz\\\donnerwerter\\\\ <br>