[php] preg_replace lukt niet? *

Pagina: 1
Acties:

  • Reggino
  • Registratie: Augustus 2002
  • Laatst online: 29-11-2023

Reggino

Je weet toch

Topicstarter
Ik wil graag een iframe gebruiken om content voor een Flashsite te tikken. Affijn: Flash MX ondersteund alleen HTML 1.0 en een Iframe bouwt geen compatible-e HTML... duzz. moet die HTML beetje aanpassen.

Nu wil ik van bepaalde tags, de waarden van attributen tussen "" zetten.

<P align=center><B><FONT face=times color=#ff6699 size=5>bla</FONT></B>

moet worden

<P align="center"><B><FONT face="times" color="#ff6699" size="5">bla</FONT></B>

Dus ik heb geprobeerd een preg_replace te fabriceren (ben daar nie zo bedreven mee zoals je ziet):

code:
1
$content = preg_replace("/(size=|color=|face=|align=)(.*)(\s|>)/","$1\"$2\"$3", $content);


Als ik dit uitvoer krijg ik

<P align="center><B><FONT face=times color=#ff6699 size=5>bla</FONT></B>

Daarnaast is dit ook niet echt de oplossing als de font face bijvoorbeeld spaties bevat... Ik heb géén idee hoe ik dát zou moeten doen..

Ik snap het echt ff nie meer... Alvast bedankt voor iedere suggestie...

[ Voor 0% gewijzigd door Reggino op 24-10-2002 16:04 . Reden: Foutje verwijderd en zinnetje toegevoegd ]

Het ouwe moet eerst op!


  • Reggino
  • Registratie: Augustus 2002
  • Laatst online: 29-11-2023

Reggino

Je weet toch

Topicstarter
heb nu
code:
1
$content = preg_replace("/\<([\w\s]+=)([\w\d\#]+)\>/","<$1\"$2\">",$content);


Dit maakt van

<P align=center><STRONG><FONT face=times color=#ff6699 size=5>bla</FONT></STRONG></P>

<P align="center"><B><FONT face=times color=#ff6699 size=5>bla</FONT></B></P>

.... nu alleen de rest nog....

Het ouwe moet eerst op!


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Ik snap niet helemaal wat je bedoelt met 'een Iframe bouwt geen compatible-e HTML', maar je wilt dus aanhalingstekens om de attribuut-waarden van tags zetten...

De reden dat het nu niet goed werkt is dat preg_replace normaalgesproken een zo lang mogelijke string matcht (greedy). dus bij '<bla a=x b=y>' zal $2 niet 'x' maar 'x b=y' bevatten. Dit kun je oplossen door '.*?' ipv '.*' te gebruiken. Dan wordt je expressie 'lazy'.

Ik zal nog ff over je 2e probleem nadenken...

  • Reggino
  • Registratie: Augustus 2002
  • Laatst online: 29-11-2023

Reggino

Je weet toch

Topicstarter
marcusk schreef op 24 oktober 2002 @ 16:39:
Ik snap niet helemaal wat je bedoelt met 'een Iframe bouwt geen compatible-e HTML',
De HTML die mijn iframe maakt heeft standaard geen quotes om de waarden van attributen van een tag heen. Deze HTML gebruik ik in textvelden in Flash MX die HTML kunnen lezen... Hij begrijpt alleen de tags niet als er geen qoutes om de waarden van de attributen heen staan... echt stom.

Het ouwe moet eerst op!


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
hier is een regex die werkt voor je tweede probleem:
PHP:
1
$content = preg_replace("/([a-z]+=)(.*?)(?=( [a-z]+=)|>)/i", "$1\"$2\"", $content);

([a-z]+=) matcht de attribuut-naam.
(.*?) matcht de attribuut-waarde.
(?=x) is een lookahead-assertion, zie Assertions.
( [a-z]+=)|> matcht de volgende attribuut-naam of de >.

  • Reggino
  • Registratie: Augustus 2002
  • Laatst online: 29-11-2023

Reggino

Je weet toch

Topicstarter
Geweldig! het werkt! Bedankt...!! Ik heb er echt lang mee lopen rommelen

Voor de volledigheid: de functie is nu:

code:
1
2
3
4
5
6
7
8
9
function MakeFlashCompatible($content) {
    $content = str_replace("<STRONG>", "<B>", $content);
    $content = str_replace("</STRONG>", "</B>", $content);
    $content = str_replace("<EM>", "<I>", $content);
    $content = str_replace("</EM>", "</I>", $content);
    $content = preg_replace("/([a-z]+=)(.*?)(?=( [a-z]+=)|>)/i", "$1\"$2\"", $content);
    $content = strip_tags($content, "<a><b><font><i><u><br><p>");
    return $content;
    }

Het ouwe moet eerst op!

Pagina: 1