• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[RegExp] alle " ausserhalb von <*>

Status
Für weitere Antworten geschlossen.

philipp

Neues Mitglied
hi, ich hab ne funktion, die mir alle möglichen sonderzeichen ins korrekte html entite ersetzen soll, sieht so aus:

PHP:
<?php
/*
* Funktion zum ersetzen fremdsprachiger Sonderzeichen
* Beinhaltet auch andere Sonderzeichen
* Das Sonderzeichen "&" muss immer den ersten Platz im array einnehmen
* The Character "&" has to take the first position in the array
* Function for replacing german Special Characters
* Includes also other Special Chars
*/

function mp_re_gerform ($str) {
 if ( isset($str) ) {
  if ( is_string($str) ) {
   //Such und Ersetzarrays, Search and Replace Arrays
   $search = array('&','ä','Ä','ö','Ö','ü','Ü','ß','€','©','«','»','¢','÷','µ','·','¶','±','£','®','§','¥','á','Á','à','À','â','Â','å','Å','ã','Ã','æ','Æ','ç','Ç','é','É','è','È','ê','Ê','ë','Ë','í','Í','ì','Ì','î','Î','ï','Ï','ñ','Ñ','ó','Ó','ò','Ò','ô','Ô','ø','Ø','õ','Õ','ú','Ú','ù','Ù','û','Û','ÿ','´','`' );
   $replace = array('&amp;','&auml;','&Auml;','&ouml;','&Ouml;','&uuml;','&Uuml;','&szlig;','&euro','&copy;','&laquo;','&raquo;','&cent;','&divide;','µ','&middot;','&para','&plusmn;','&pound;','&reg;','&sect;','&yen;','&aacute;','&Aacute;','&agrave;','&Agrave;','&acric;','&Acirc;','&aring;','&Aring;','&atilde;','&Atilde;','&aelig;','&AElig;','&ccedil;','&Ccedil;','&eacute;','&Eacute;','&egrave;','&Egrave;','&ecirc;','&Ecirc;','&euml;','&Euml;','&iacute;','&Iacute;','&igrave;','&Igrave;','&icirc;','&Icirc;','&iuml;','&Iuml;','&ntilde;','&Ntilde;','&oacute;','&Oacute;','&ograve;','&Ograve;','&ocirc;','&Ocirc;','&oslash;','&Oslash;','&otilde;','&Otilde;','&uacute;','&Uacute;','&ugrave;','&Ugrave;','&ucirc;','&Ucirc;','&yuml;','´','`'  );
   
   return str_replace($search, $replace, $str);
  } else {
   return "ERROR: Die uebergebene Variable ist nicht vom Datentyp String";
  }
 } else {
  return "ERROR: Es wurde keine Zeichenfolge uebergeben";
 }
}

?>

ich will aber auch alle " ersetzen, aber nur, wenn sie ausserhalb von <*> stehen, mit regexp kenn ich mich nur minimal aus, wie könnte der ausdruck aussehen?
 
Werbung:
Ich weiß, es ist sehr umständlich, aber etwas anderes ist mir jetzt auf die schnelle nicht eingefallen.
Ich bin mir sicher, dass es eine andere und bessere Variante gibt.
Vielleicht schreibt sie ja noch jemand in das foum
PHP:
<?php
//Das ist das Zeichen, mit dem du " ersetzen möchtest
$zeichen = "#";
//Die Zeichenkette die du bearbeiten möchtest
$string0 = "Hallölölö < nicht umwandeln äöüö-öäüäö> blöbl< bla >öblö";
//Ermitteln aller Zeichen außerhalb von < und >
$string1 = preg_split("/<(.*)>/isU", $string0);
//Ermitteln des benötigten Suchmusters um alle < > - blöcke zu finden.
$i = 0;
foreach ($string1 as $needed)
{
    $i++;
}
$muster = "@(";
for ($j = 0; $j < $i; $j++)
{
    $muster .= $string1[$j];
    if ($j != ($i-1))
    {
        $muster .= "|";
    }
}
$muster .= ")@isU";
//Mit dem ermittelten Suchmuster < > - Blöcke suchen
$string2 = preg_split($muster, $string0);
$string3 = "";
//Zeichenkette wieder zusammenführen
//außerhalb von < und > alle Sonderzeichen umwandeln und " umwandeln,
//< > - Blöcke im Originalzustand belassen
for ($k = 0; $k < $i; $k++)
{
    $speicher .= htmlentities($string1[$k]);
    $string3 .= preg_replace ('/"/is',$zeichen,$speicher);
    $string3 .= $string2[($k+1)];
}
echo ("Original: ".$string0."<br><br>umgewandelt: ".$string3);
?>
Der am ende umgewandelte String ist $string3
Vergiss nicht $zeichen anzupassen. Das ist dass Zeichen mit dem du das " außerhalb von < und > ersetzen möchtest
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben