hallo,
durch ein script, werden sonderzeichen in html code ersetzt. das problem ist das hierbei auch die anführungszeichen im img tag auch konvertiert werden, was aber nicht sein soll.
hier hab mir eine reguläre expression dazu gebastellt, aber es klappt nicht, und ich komme nicht weiter. das ganze sieht bis jetzt so aus:
$search = "(<img)(")(>)";
$replace = "'";
$text = eregi_replace($search, $replace, $text);
ich will das alle " innerhalb des img tags in ' ersetzt werden.
onemorenerd
14-07-2009, 21:44
Stopp stopp stopp! Was du da machst ist Reparatur, aber du solltest da ansetzen, wo der Schaden entsteht. "Durch ein Script werden Sonderzeichen in HTML Code ersetzt ... hierbei auch die Anführungszeichen im img Tag". Im Klartext: Dieses Script macht das HTML kaputt. Also muss das Script geändert werden. Das ist viel sinnvoller.
Wie konvertiert das Script denn die Sonderzeichen?
da hast du natürlich recht. das script ist sehr simpel:
$suche[] = '/ä/';
$suche[] = '/Ä/';
$suche[] = '/ö/';
$suche[] = '/Ö/';
$suche[] = '/ü/';
$suche[] = '/Ü/';
$suche[] = '/\"/';
$suche[] = '/»/';
$suche[] = '/«/';
$suche[] = '/©/';
$suche[] = '/–/';
$suche[] = '/€/';
$ersetze[] = 'ä';
$ersetze[] = 'Ä';
$ersetze[] = 'ö';
$ersetze[] = 'Ö';
$ersetze[] = 'ü';
$ersetze[] = 'Ü';
$ersetze[] = '"';
$ersetze[] = '»';
$ersetze[] = '«';
$ersetze[] = '©';
$ersetze[] = '–';
$ersetze[] = '€';
$text = preg_replace($suche, $ersetze, $text);
ich wüste jetzt aber nicht wie ich es anstellen sollte das dabei kein html code verändert wird. bin mit regulären expression nicht so fit :o
onemorenerd
14-07-2009, 23:43
Wie wäre es denn mit htmlentities($text, ENT_NOQUOTES)?
Wie wäre es denn mit den Bullsh*t lassen, und einfach eine passende Zeichenkodierung verwenden ...?
Wie wäre es denn mit htmlentities($text, ENT_NOQUOTES)?
das habe ich als erstes probiert. nur ersetzt htmlentities alle zeichen. auch html code. aus <p> wird dann z.b. <p>
also nicht wirklich das ware.
@wahsaga
weil das da nicht so einfach möglich ist. man muss ja immer abwägen zwischen aufwand/nutzen ;)
deswegen wäre es mit regulären expressionen am einfachsten.
onemorenerd
15-07-2009, 00:14
Dann kombiniere es halt noch mit str_replace(). Oder streich halt " aus deiner preg_replace-Variante.
Der Aufand für eine passende Kodieruneg wäre übrigens marginal - reicht schließlich ein einziges header().
es ist leider nicht möglich das " zu entfernen. muss drin sein.
>> Dann kombiniere es halt noch mit str_replace()
was würde das bringen? ist doch das selbe
ich will doch nur wissen wie die reg ex richtig aussehen muss. das hier funktioniert ja nicht: $search = "(<img)(")(>)";
ich weiß, das ist eine bullshit lösung, aber ich mache das für einen bekannten. und da will ich jetzt nicht mehr energie als nötig da rein stecken. aber ich hab bis jetzt schon zu viel zeit investiert (was nicht mein plan war)
nachtrag:
ich geh jetzt mal den anderen weg. bevor die zeichen in html codes umcodiert werden, versuche ich alles was in tags als " eingetragen ist in ' umzuwandeln (die normalen hochkommas werden nicht codiert). bis jetzt bin ich so weit:
$text = preg_replace("/(<\/?)(\"+)([^>]*>)/e", "'", $text);
nur bei (\"+) hängt es. wie muss ich das richtig eintragen damit alle " in ' convertiert werden?
es hat sich erledigt. das hier ersetzt alle " durch ' (für diejenigen denen es interessiert):
$text = preg_replace('/<([^<>]+)>/e', '"<" . str_replace("\\\\"", \'\\\'\', "$1") . ">"', $text);