webForumDet fria alternativet

include kommandon

PHP

9 svar · 705 visningar · startad av Type

Medlem sedan mars 20021 239 inlägg
Frågan#1

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...

Medlem sedan mars 20021 239 inlägg
#2

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);
Medlem sedan aug. 20039 340 inlägg
#3

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.)

Medlem sedan juni 20001 251 inlägg
#4

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;
?>
Medlem sedan mars 20021 239 inlägg
#5

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?

Medlem sedan mars 20021 239 inlägg
#6

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 :)

Medlem sedan juli 20023 617 inlägg
#7

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

Medlem sedan mars 20021 239 inlägg
#8

vad står \r för?

Funkade för övrigt perfekt fiddler. tack!

Medlem sedan juli 20023 617 inlägg
#9

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.

Medlem sedan mars 20041 505 inlägg
#10

\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.

267 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)