webForumDet fria alternativet

include kommandon

9 svar · 703 visningar · startad av Type

TypeMedlem sedan mars 20021 340 inlägg
#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...

TypeMedlem sedan mars 20021 340 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);
nitro2k01Medlem sedan aug. 20037 630 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.)

stevenetMedlem sedan juni 2000985 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;
?>
TypeMedlem sedan mars 20021 340 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?

TypeMedlem sedan mars 20021 340 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 :)

fiddlerMedlem sedan juli 20022 464 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

TypeMedlem sedan mars 20021 340 inlägg
#8

vad står \r för?

Funkade för övrigt perfekt fiddler. tack!

fiddlerMedlem sedan juli 20022 464 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.

TroxyMedlem sedan mars 20041 508 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.

Genererad på 389 ms · cache AV · v20260730165559-full.f96bc7eb