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);
9 svar · 705 visningar · startad av Type
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...
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);
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.)
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;
?>
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?
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 :)
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
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.
\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.