PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ein paar vorschläge


feuervogel
11.01.2004, 16:11:56
hallo!

ich habe zwei verbesserungsvorschläge:

einerseits werden beim einfügen von php code zwischen die [code]-tags unnötig leerzeilen eingefügt. wie das zu umgehen ist, hat mir folgender beitrag gezeigt:

von mir angefangen und beendet (http://www.selfphp.com/forum/showthread.php?s=&threadid=6610)

so, das nächste wären diese formatierungs-buttons: im Firbird und auch im mozzilla gehen da so js-popups auf; dies geht auch anders, einfach mal hier schauen:

mein gästebuch (http://www.julianmoritz.de/guestbook.php?mode=form)

und die dritte sache ist: ich sehe ja, in welchem forum es beiträge gibt, deren timestamp größer sind als der meines letzen besuchs. wenn ich aber in ein thema beginne, ist dies als ungelesen markiert, obwohl sich die timestamps ja entsprechen müssten...da stimmt entweder ein vergleich nicht oder die timestamps werden unterschiedlich gesetzt?

feuervogel
12.01.2004, 22:03:42
ja liest das denn keiner? oder warum wird dazu nichts gesagt?

chris17
12.01.2004, 23:23:21
Hi,
einerseits werden beim einfügen von php code zwischen die [code]-tags unnötig leerzeilen eingefügt. wie das zu umgehen ist, hat mir folgender beitrag gezeigt:
Welche Leerzeichen meinst Du? Doch nicht die, mit denen man den Code einrücken kann? ;-)

Die Admins melden sich zur Zeit eher selten.
Vielleicht schauen ja |Coding oder Damir mal wieder vorbei. :-)

[OT]
Apropos, @Admins:
Mich würde mal interessieren, was aus dem "Gewinnspiel" geworden ist.

feuervogel
13.01.2004, 13:27:10
ich meinte nicht leerzeiCHen, sonder leerzeiLen, dass leerzeichen eingefügt werden ist mir klar. mal ein beispiel...folgender code:

<?php
if ( !function_exists( "html_entity_decode" ) )
{
function html_entity_decode( $html )
{
$table = array_flip( get_html_translation_table( HTML_ENTITIES ) );
return strtr( $html , $table );
}
}
?>

sieht in der code-ansicht so aus:

<?php
if ( !function_exists( "html_entity_decode" ) )
{
function html_entity_decode( $html )
{
$table = array_flip( get_html_translation_table( HTML_ENTITIES ) );
return strtr( $html , $table );
}
}
?>


na, leerzeilen entdeckt?

chris17
13.01.2004, 13:42:21
Sorry feuervogel, da hab' ich mich gründlich verlesen :-))
na, leerzeilen entdeckt?
Nö, ich seh' da keine Leerzeilen.


P.S.: Was für einen Rechner benutzt Du? Apple?

feuervogel
13.01.2004, 14:59:22
oh ja, im ie sind da keine...aber im firebird schon...mal schauen wo drans liegt...

feuervogel
13.01.2004, 16:03:24
okay, als html sieht das ganze so aus (ohne [ php ]-tags):

<br />
&lt;?php<br />
if ( !function_exists( "html_entity_decode" ) )<br />
{<br />
function html_entity_decode( $html )<br />
{<br />
$table = array_flip( get_html_translation_table( HTML_ENTITIES ) );<br />
return strtr( $html , $table ); <br />

}<br />
}<br />
?&gt;<br />
<br />

wenn nun aber die code ansicht eingeschaltet ist, macht der parser aus dem code das:


<blockquote><pre><font class="small">PHP:</font><hr><code><font color="#000000">
<font color="#0000BB">&lt;?php
<br /></font><font color="#007700">if&nbsp;(&nbsp;!</font><font color="#0000BB">function_exists</font><font color="#007700">(&nbsp;</font><font color="#DD0000">"html_entity_decode"&nbsp;</font><font color="#007700">)&nbsp;)

<br />{
<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</font><font color="#0000BB">html_entity_decode</font><font color="#007700">(&nbsp;</font><font color="#0000BB">$html&nbsp;</font><font color="#007700">)
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$table&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">array_flip</font><font color="#007700">(&nbsp;</font><font color="#0000BB">get_html_translation_table</font><font color="#007700">(&nbsp;</font><font color="#0000BB">HTML_ENTITIES&nbsp;</font><font color="#007700">)&nbsp;);
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">strtr</font><font color="#007700">(&nbsp;</font><font color="#0000BB">$html&nbsp;</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$table&nbsp;</font><font color="#007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />}
<br /></font><font color="#0000BB">?&gt;
<br /></font>
</font>
</code><hr></pre></blockquote>


wichtig ist m.e. hier zu beachten: der pre-tag stellt den code so da wie er formatiert wurde; das heißt, ein break wird auch ohne <br>-tag zu einem break. wenn da hinzu aber noch <br>-tags kommen, wird das zu einer leerzeile...

auch hier noch mal meine lösung, wie das problem gelöst werden kann...einfach in den parser einfügen:

preg_match_all( "/(.+)/Ui" , $string , $matches , PREG_SET_ORDER );

foreach ( $matches as $key => $value )
{
$matches[ $key ][ 1 ] = str_replace( "<br />" , "" , $matches[ $key ][ 1 ] );
$matches[ $key ][ 1 ] = html_entity_decode( $matches[ $key ][ 1 ] );
$matches[ $key ][ 1 ] = @highlight_string( $matches[ $key ][ 1 ] , true);
$string = preg_replace( "/(.+)/Ui" , "<pre>" . $matches[ $key ][ 1 ] . "</pre>" , $string );
}

feuervogel
13.01.2004, 16:05:25
ich benutze einen ganz normalen dummdoof windows-xp pc...

chris17
13.01.2004, 16:24:07
Ahaaa, mit Netscape 7.0 kann ich das "Problem" nachvollziehen, jede Menge Leerzeilen...

Mit'm Opera 7.22 sind keine da, wie beim IE

feuervogel
13.01.2004, 16:56:42
wie gesagt, hatte das gleich problem bei meinem forum, an dem ich grade schreibe, aber habe ne lösung ja gepostet...wäre halt schön, wenn ein admin mal vorbei schauen würde...

meikel
13.01.2004, 17:26:09
Original geschrieben von feuervogel
wie gesagt, hatte das gleich problem bei meinem forum, an dem ich grade schreibe, aber habe ne lösung ja gepostet...
Die Lösung ist eigentlich ganz einfach: erzähle den Browsern, die Leerzeilen darstellen, sie mögen bitte nur bei einem <br /> einen Zeilenumbruch machen und sich nicht um die n kümmern.

Teste das einfach:
echo nl2br("DasnistneinnText");
Ein Browser, der diesen Text mit zusätzlichen Leerzeilen verunstaltet, will gelöscht werden.

feuervogel
13.01.2004, 17:35:48
dann schreib mal

echo "<pre>" .nl2br("DasnistneinnText") . "</pre>";

und schau dir das ganze mitm firebird an...


keine eigenwerbung (http://doenerbude.kicks-ass.net/format.php)

feuervogel
13.01.2004, 17:38:12
nl2br

(PHP 3, PHP 4 )
nl2br -- Fügt vor allen Zeilenumbrüchen eines Strings HTML-Zeilenumbrüche ein
Beschreibung
string nl2br ( string string)

Gibt den string mit einem vor allen Neue-Zeile-Zeichen eingefügten '<br />' zurück.

die funktion ersetzt die n zeichen nicht, sondern sie setzt lediglich ein <br /> davor...

meikel
13.01.2004, 17:55:14
Original geschrieben von feuervogel
die funktion ersetzt die n zeichen nicht, sondern sie setzt lediglich ein <br /> davor...
Klar. Allerdings schafft das Ärger, wenn sowas innerhalb von <pre> Tags auftaucht (siehe Dein Beispiel):
<pre>Das<br />
ist<br />
ein<br />
Text</pre>
Dort muß das <br /> raus, weil hier (innerhalb von <pre> tags) der Browser auch die n interpretieren muß.

nl2br() muß daher so eingesetzt werden, daß es <code> </code> und <pre> </pre> in Ruhe läßt.

feuervogel
13.01.2004, 18:27:49
*tataa*

$matches[ $key ][ 1 ] = str_replace( "<br />" , "" , $matches[ $key ][ 1 ] );

:)

meikel
13.01.2004, 18:48:17
Original geschrieben von feuervogel
*tataa*
$matches[ $key ][ 1 ] = str_replace( "<br />" , "" , $matches[ $key ][ 1 ] );
:)
Fein, wenn das so reicht.

Ich hatte damals größere Bocksprünge machen müssen:

$content = preg_replace_callback("{(<pre>.*</pre>)}siU", "pre_core", $content);
$content = preg_replace_callback("{(<pre+.*</pre>)}siU", "pre_core", $content);

/*
* Funktion zum Entfernen von <br /> in Abschnitten zwischen <pre> | @@ Meikel Katzengreis, 2003-02-21
* Last Update: @@ Thorsten, 2003-07-23
*/
function pre_core ($text)
{
$text = preg_replace("=<br(>|([s/][^>]*)>)
?
?=i", "
", $text[1]);
return $text;
}