Gå til innhold

Garanti's hjelpetråd til PHP


Anbefalte innlegg

Videoannonse
Annonse
Gjest Slettet+6132
Skrevet

$string = nl2br($string);

$string = addslashes($string);

 

Jeg beklager at jeg ikke fulgte helt med, om du bytter om på de to slik jeg har gjort nå skal det virke. Det er ikke \n som blir escapet, kun slashen selv. Det vi egentlig vil er at \n (newline) endres til <br/>, slik at det faktisk blir en ny linje i et HTML-dokument.

Skrevet

Hei igjen. Jeg vet at man ved å inkludere følgende kode-linje

 

header("Content-Type: text/html;charset=UTF-8");

 

får man følgende tilbake:

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

Kan man gjøre noe lignende for å f.eks inkludere stylesheets, eller doctype?

Gjest Slettet+6132
Skrevet

Feil, header() sender kun ut en HTTP-header til browseren, meta-taggen må du legge til selv i HTML-koden din, det samme gjelder doctype og stylesheets.

  • 3 uker senere...
Skrevet (endret)

Holder på med en liten preg_replace-snutt som virker helt umulig, selv om den er ganske simpel. Har holdt på med den i 4-5 dager nå og har vært en utømmelig kilde til frustrasjon og hodepine.

 

Jeg vil at snutten skal ta bort hver bit av <br> som befinner seg inni <pre>-tagen:

$patt = "/(\<pre\>)(\<br\>)(\<\/pre\>)/i";
$subj = "tekst<pre>uyuyliuy<br>oiyoiy</pre>teksttekst'";

$subj = preg_replace("$repl", '$1$3', $subj;);

Endret av Garanti
Skrevet

Du er inne på noe. Vil det kunne være flere enn en br i midten eller bare en. Hvis det bare er en inne kan man bruke denne:

 

preg_replace('/(<pre>.*)<br>(.*<\/pre>)/i', '$1$2', 'ekst<pre>uyuyliuy<br>oiyoiy</pre>teksttekst');

 

Men hvis det kan være flere br så vil den ikke fungere og da må vi se etter andre løsninger.

Skrevet (endret)

<?php
echo preg_replace_callback(
'#<pre>(.*?)</pre>#s',
create_function(
	'$m',
	'return \'<pre>\' . str_replace(\'<br>\', \'\', $m[1]) . \'</pre>\';'
),
"This is a text<br>with <pre>Preformatted
<br>
text
<br>
Blah
</pre>
-
<pre>
NoBR
</pre>
-
<pre>
Yet<br>An<br>Other
</pre>
Foo<br>Bar"
);
?>

EDIT: Fixa en liten bug

Endret av itsmebth
Skrevet

Tusen takk! Har ikke sett funksjonen preg_replace_callback() før, får lese litt om den i manualen :)

 

Bare et lite spørsmål: Hvorfor bruker du # i "#<pre>(.*?)</pre>#s", i stedet for /?

Skrevet

Hei.

Bra itsmebth kunne hjelpe deg!

Regnet med at det kunne være flere <br> men var på vei ut i solen i går så det var alt jeg rakk før jeg stakk.

 

Jeg er litt sta og ville komme med mitt eget forslag til hvordan det kunne løses :-)

 

preg_replace('/((?<=\<pre\>).*(?=\<\/pre\>))/iesU', "str_replace('<br>', '', '$1')", $string);

 

Dette er bare en annen måte å gjøre det på. Har ikke peiling hvem av de som vil gi best resultat med ytelse etc.

Skrevet

Hvis hastighets forskjellene i testen hans er representativt så tror jeg aldri jeg skal bruke e modifern igjen og alltid bruke preg_replace_callback :-) Har aldri benyttet meg av preg_replace_callback tidligere men jeg må innrømme den virker ganske kraftig.

 

Takk for hardigets tipset itsmebth!

 

... hmm må få lagt til preg_replace_callback i regex verktøyet mitt ;-)

Skrevet

Er det slik du mener?

 

<?php

$arr = array(
'',
null,
1,
2,
'3',
0,
);

$count = 0;
array_walk_recursive($arr, create_function('&$v', 'global $count;if(!empty($v)) $count++;'));
echo $count;

?>

Skrevet
Hos meg såblir kun stringen 3 outputtet, men jeg ønsker at integerne 1 og 2 skal komme gjennom. Takk for hjelpen! :)

 

3 er antallet ikke-tomme elementer i arrayet ($count). :)

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...