Avatar billede sjh Nybegynder
30. oktober 2004 - 08:42 Der er 31 kommentarer og
1 løsning

preg_replace lav script omvent

Jeg fandt denne smarte funktion.. men jeg vil godt ha den omvent.. altså så det bliver: <test>TEKST</test>


  // http://dk2.php.net/preg_replace
  $strHtml = "<test>tekst</test>";
  $strHtml = preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $strHtml);
  echo $strHtml; // <TEST>tekst</TEST>
Avatar billede bojo Nybegynder
30. oktober 2004 - 09:55 #1
Ikke elegant, men gør jobbet

  $strHtml = "<test>tekst</test>";
  $strHtml = preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtolower('\\2').'\\3'", strtoupper($strHtml));
  echo $strHtml; // <TEST>tekst</TEST>
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:03 #2
hmm det virker altså ikke helt.. hvis man skriver:

<test id="test">tekst</test>

bliver til:
<test ID=\"TEST\">TEKST</test>

id="test" må ikke laves om..
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:11 #3
det er fordi du bryder syntaxen, brug

$strHtml = "<test id='test'>tekst</test>";
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:12 #4
næ - sorry :-(
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:14 #5
du skriver "Ikke elegant.." har du en beder måde at gøre det på??
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:14 #6
men generel betragtning - vil du ikke nok stille HELE dit spg i første omgang, så man (jeg) ikke svarer på noget jeg kan løse for så at få kastet noget lidt sværere tilbage :-)
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:15 #7
nej, jeg, har ikke, men en med tjek på regex har
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:17 #8
jo men jeg kunne jo ikke vide at den bryder syntaxen..
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:26 #9
jeg var vist heldig
$strHtml = preg_replace("/(.?>)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $strHtml);
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:33 #10
desværre.. for at være sikker på at det virker som det skal kan man jo teste det sådan:

  $strHtml = @implode("", file("http://www.eksperten.dk/spm/556002"));
  $strHtml = preg_replace("/(.?>)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $strHtml);
  echo $strHtml;
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:39 #11
men det kan da godt være at man ikke skal bruge preg_replace() til det.. det er ok hvis i kan finde en anden løsning..
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:39 #12
nå se, nu kom den "rigtige" opgave, det er jo en del ud over

Jeg fandt denne smarte funktion.. men jeg vil godt ha den omvent.. altså så det bliver: <test>TEKST</test>

er det så ALLE <blabla>tekst</blabla> du vil have lavet om, uanset hvad der står mellem < og >, så det faktisk er >tekst< du vil have stort?
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:43 #13
JA alt hvad der står mellem > HER < skal være store bogstaver..
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:45 #14
nu må jeg heller sige at det skal altså virke hvis man skriver..
$strHtml = @implode("", file("http://www.eksperten.dk/spm/556002"));

og <script>HER</script> må ikke laves om..
Avatar billede bojo Nybegynder
30. oktober 2004 - 10:45 #15
$strHtml = preg_replace("/(>.*<)/Ue", "strtoupper('\\1')", $strHtml);
Avatar billede sjh Nybegynder
30. oktober 2004 - 10:57 #16
hvis du ser på det så laver den ikke det her med store bogstaver..

<div class="enews"> HER <span style...
Avatar billede bojo Nybegynder
30. oktober 2004 - 11:00 #17
jooo

$strHtml = "<test id='test'>tekst</test> <div class=\"enews\"> her <span style...>";
$strHtml = preg_replace("/(>.*<)/Ue", "strtoupper('\\1')", $strHtml);
echo $strHtml; // <TEST>tekst</TEST>
Avatar billede sjh Nybegynder
30. oktober 2004 - 11:04 #18
Så prøv med..

$strHtml = @implode("", file("http://www.eksperten.dk/spm/556002"));
$strHtml = preg_replace("/(>.*<)/Ue", "strtoupper('\\1')", $strHtml);
echo $strHtml;
Avatar billede sjh Nybegynder
30. oktober 2004 - 11:24 #19
Jeg har nu leget lidt med det.. og har fået det til at virke på denne måde..

<?php
  $strHtml = @implode("", file("http://hjem.get2net.dk/sjh/ny/"));
  $arrTag = preg_split('((>)|(<))', $strHtml, -1, 2);
  $intCount = count($arrTag);
  $blnUpper = true;
  if ($arrTag[0] == "<") $blnUpper = false;
  for ($i = 0; $i < $intCount; $i++) {
    if ($blnUpper) {
      $arrTag[$i] = strtoupper($arrTag[$i]);
      $blnUpper = false;
    }
    if ($arrTag[$i] == ">") $blnUpper = true;
  }
  echo join($arrTag);
?>

bojo > Jeg vil godt give dig de 100 point som tak for dine forsøg.. smid et svar..
Avatar billede bojo Nybegynder
30. oktober 2004 - 11:37 #20
nej tak :-)

Jeg overvejede også split, men det er for langsomt. Jeg leger videre med replace senere, skal lige i byen
Avatar billede bojo Nybegynder
30. oktober 2004 - 11:43 #21
kom lige i tanke om det

$strHtml = preg_replace("/(>.+<)/Ues", "strtoupper('\\1')", $strHtml);

s for at få . til at tage nl med
Avatar billede sjh Nybegynder
30. oktober 2004 - 12:36 #22
ja men der sker åben bart noget når den kommer til " så laver den ged i det..
Avatar billede sjh Nybegynder
30. oktober 2004 - 13:03 #23
hmmm har fundet fejlen.. det er hvis der står < så gør den et eller andet sjovt..

det virker sådan her... men så kan jeg jo lige så godt burge preg_split()

<?php
  $strHtml = @implode("", file("http://www.eksperten.dk/spm/556002"));
  $strHtml = str_replace('<', '/<', $strHtml);
  $strHtml = preg_replace("/(>.+<)/Ues", "strtoupper('\\1')", $strHtml);
  $strHtml = str_replace('/<', '<', $strHtml);
  echo $strHtml;
?>
Avatar billede sjh Nybegynder
02. november 2004 - 16:35 #24
bojo > er du sikker på du ikke vil have de point??
Avatar billede bojo Nybegynder
02. november 2004 - 18:42 #25
ja da helt sikker

prøv iøvrigt dette: $strHtml = preg_replace("/(>[^<]*<)/Ue", "strtoupper('\\1')", $strHtml);
Avatar billede sjh Nybegynder
02. november 2004 - 22:36 #26
hmm desværre ikke den laver \ om til \\ osv..
Avatar billede bojo Nybegynder
02. november 2004 - 22:59 #27
hmm, enten forstår jeg ikke hvad du mener eller .... Jeg tror da det virker hos mig, se

http://her.lir.dk/t/hmm.php
Avatar billede sjh Nybegynder
02. november 2004 - 23:04 #28
se de her..

der er \ foran "

preg_replace("

PREG_REPLACE(\"

$strHtml = preg_replace("/(>[^<]*<)/Ue", "strtoupper('\\1')", $strHtml);

$STRHTML = PREG_REPLACE(\"/(>[^<]*<)/UE\", \"STRTOUPPER('\\1')\", $STRHTML);
Avatar billede bojo Nybegynder
02. november 2004 - 23:17 #29
nååå - det er ikke at lave / m det er at escape " og har vist ikke noget at gøre med den regex??

Det "ordnes" med stripslashes($strHtml), men så er der nok ikke meget i forhold til din løsning og dog, 2 gennemløb i stedet for 3
Avatar billede sjh Nybegynder
02. november 2004 - 23:23 #30
måske men den jeg hvade lave med preg_split() gør det ikke..
Avatar billede bojo Nybegynder
02. november 2004 - 23:24 #31
sært - nå pyt, nok om den :-)
Avatar billede sjh Nybegynder
02. november 2004 - 23:26 #32
ha ha ja.. tager enu en gang :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester