TypeMedlem sedan mars 20021 340 inlägg
Hej alla
Jag ber om ursäkt om tråd redan finns (jag har inte hittat något som precis besvarar mitt problem).
Jag har en textfil (med .php) som innehåller tex detta:
[rubrik]Rubrik 1[/rubrik]
Text
Nytt stycke
Text TextText
[rubrik]Rubrik 2[rubrik]
Mer text mer text
Jag vill inkludera denna och leta efter rubrik och då ersätta det med <h1> och senare även kunna ha flera taggar, tex [fet], [kursiv] osv.... Någon som kan hjälpa mig med en länk eller förklaring på hur man gör?
Vad jag luskat ut är att man ska använda file istället för include... men sen funkar det inte...
TypeMedlem sedan mars 20021 340 inlägg
Nu börjar jag komma någonvart:
$lines = file_get_contents($p.".inc.php");
$patterns[0] = "/\[rubrik\]/";
$patterns[1] = "/\[\/rubrik]/";
$replacements[0] = '<h2>';
$replacements[1] = '</h2>';
print preg_replace($patterns, $replacements, $lines);
nitro2k01Medlem sedan aug. 20037 630 inlägg
Semantiskt sett bör du även byta namn på filen så att den har en annan filändelse än inc.php. (T ex txt) Om du får $p från en querystring bör du även kolla formatet på den så att folk inte kan injicera ../ och komma åt filer som de inte bör. (T ex filen med inlggningsuppgifter till databasen.)
stevenetMedlem sedan juni 2000985 inlägg
Löses nog lättast med str_replace
<?php
$lines = file_get_contents($p.".inc.php");
$tags = array("[rubrik]", "[/rubrik]", "[fet]", "[/fet]", "[kursiv]", "[/kursiv]");
$replace = array("<h2>", "</h2>", "<strong>", "</strong>", "<em>", "</em>");
$lines = str_replace($tags,$replace,$lines);
echo $lines;
?>
TypeMedlem sedan mars 20021 340 inlägg
stevenet skrev:
Löses nog lättast med str_replace
<?php
$lines = file_get_contents($p.".inc.php");
$tags = array("[rubrik]", "[/rubrik]", "[fet]", "[/fet]", "[kursiv]", "[/kursiv]");
$replace = array("<h2>", "</h2>", "<strong>", "</strong>", "<em>", "</em>");
$lines = str_replace($tags,$replace,$lines);
echo $lines;
?>
Det där gick ju jättesmidigt! Problemet är att om jag skriver så här:
[rubrik]Rubrik1[/rubrik]
texttexttext
... så blir det ju en radbrytning mellan rubrik1 och texttexttext eftersom jag kör nl2br() på hela rasket. jag vill på något sätt trimma bort \n från [/rubrik]. Tips?
TypeMedlem sedan mars 20021 340 inlägg
Tack så mycket Stevenet!!!
Nu fular jag mig så länge:
$lines = file_get_contents($p.".inc.php");
$tags = array("[editable]","[rubrik]", "[/rubrik]", "[fet]", "[/fet]", "[kursiv]", "[/kursiv]");
$replace = array("<!--editable-->","<span class='head2'>", "</span>", "<strong>", "</strong>", "<em>", "</em>");
$lines = str_replace($tags,$replace,$lines);
echo nl2br($lines);
span.head2{
font-family:Trebuchet MS,Helvetica,Arial,Verdana,sans-serif;
font-size:15px;
font-weight:bold;
text-transform:uppercase;
color:#F30;
margin:0;
padding:11px 0 0 5px;
}
Helst vill jag att man ska söka efter [/rubrik]\n och ersätta med </h2> men det funkar inge vidare för mig så det här får duga så länge :)
fiddlerMedlem sedan juli 20022 464 inlägg
Type skrev:
Helst vill jag att man ska söka efter [/rubrik]\n och ersätta med </h2> men det funkar inge vidare för mig så det här får duga så länge :)
Det kanske är [/rubrik]\r\n du ska söka efter. Bara en tanke... :OO
TypeMedlem sedan mars 20021 340 inlägg
vad står \r för?
Funkade för övrigt perfekt fiddler. tack!
fiddlerMedlem sedan juli 20022 464 inlägg
Type skrev:
vad står \r för?
Funkade för övrigt perfekt fiddler. tack!
Vad bra! Antar att \r står för retur helt enkelt, men jag kan ha fel. Om du matar in radbrytningar med retur-knappen får du \r\n.
/Litet tillägg: nl2br ersätter \n med <br /> vilket ger resultatet \r<br />. Om man är känslig för hur den genererade koden ser ut kan man göra en egen funktion som ersätter \r\n med <br /> istället för att använda nl2br.
TroxyMedlem sedan mars 20041 508 inlägg
\r = Carriage Return (CR)
\n = Line Feed (LF)
Det är två olika tecken för radbrytningar.
Windows använder båda dessa tecken för att göra radbrytningar, dvs. CR+LF.
Unix, Linux, Mac OS X och liknande använder vanligtvis bara LF för radbrytningar.