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>
Annonceindlæg fra Deloitte
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>
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..
30. oktober 2004 - 10:11
#3
det er fordi du bryder syntaxen, brug $strHtml = "<test id='test'>tekst</test>";
30. oktober 2004 - 10:12
#4
næ - sorry :-(
30. oktober 2004 - 10:14
#5
du skriver "Ikke elegant.." har du en beder måde at gøre det på??
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 :-)
30. oktober 2004 - 10:15
#7
nej, jeg, har ikke, men en med tjek på regex har
30. oktober 2004 - 10:17
#8
jo men jeg kunne jo ikke vide at den bryder syntaxen..
30. oktober 2004 - 10:26
#9
jeg var vist heldig $strHtml = preg_replace("/(.?>)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $strHtml);
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;
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..
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?
30. oktober 2004 - 10:43
#13
JA alt hvad der står mellem > HER < skal være store bogstaver..
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..
30. oktober 2004 - 10:45
#15
$strHtml = preg_replace("/(>.*<)/Ue", "strtoupper('\\1')", $strHtml);
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...
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>
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;
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..
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
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
30. oktober 2004 - 12:36
#22
ja men der sker åben bart noget når den kommer til " så laver den ged i det..
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;
?>
02. november 2004 - 16:35
#24
bojo > er du sikker på du ikke vil have de point??
02. november 2004 - 18:42
#25
ja da helt sikker prøv iøvrigt dette: $strHtml = preg_replace("/(>[^<]*<)/Ue", "strtoupper('\\1')", $strHtml);
02. november 2004 - 22:36
#26
hmm desværre ikke den laver \ om til \\ osv..
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
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);
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
02. november 2004 - 23:23
#30
måske men den jeg hvade lave med preg_split() gør det ikke..
02. november 2004 - 23:24
#31
sært - nå pyt, nok om den :-)
02. november 2004 - 23:26
#32
ha ha ja.. tager enu en gang :-)
Vi tilbyder markedets bedste kurser inden for webudvikling