PHP BBcode class

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP BBcode class

Δημοσίευση από kapoios001 » 25 Αύγ 2011 16:39

Γεια σε όλους,

προσπαθώ να προσαρμόσω ένα class που βρήκα για BBcode support.

Το πρόβλημά μου είναι με το nl2br(). Στο <li></li> <ul></ul> βάζει και εκεί <br /> tag με αποτέλεσμα το κείμενο να έχει πολλά κενά ανάμεσα στα list items.

Δεν μπορώ να βρω τρόπο να το διορθώσω.

Κώδικας: Επιλογή όλων

$bbcode = new BBcode;

class BBcode &#123;
    // Send all text to be parsed here!
	function coverpass&#40;$text&#41; &#123;
		// Checks if there are any BBCode Tags
		$istag = strrpos&#40;$text, "&#93;"&#41;;
		if&#40;$istag == 0&#41;
			return $text; // Nope, return the text
		else &#123;
			return $this->parsetags&#40;$text&#41;; // Yup, Parse Them
		&#125;
	&#125; // end coverpass&#40;&#41; function
	
	function parsetags&#40;$text&#41; &#123;
		// This is used in some blogging applications, can be uncommented for that application
		//$text = str_replace&#40;"&#91;more&#93;", "Continued...", $text&#41;;

		$text = nl2br&#40;e&#40;$text&#41;&#41;;

		// Lets do some generic checks
		$text = preg_replace&#40;"&#40;\&#91;b\&#93;&#40;.+?&#41;\&#91;\/b\&#93;&#41;is", '<strong>$1</strong>', $text&#41;; // Bold
		$text = preg_replace&#40;"&#40;\&#91;i\&#93;&#40;.+?&#41;\&#91;\/i\&#93;&#41;is", '<em>$1</em>', $text&#41;; // Italics
		$text = preg_replace&#40;"&#40;\&#91;u\&#93;&#40;.+?&#41;\&#91;\/u\&#93;&#41;is", '<u>$1</u>', $text&#41;; // Underline
		$text = preg_replace&#40;"&#40;\&#91;s\&#93;&#40;.+?&#41;\&#91;\/s\&#93;&#41;is", '<del>$1</del>', $text&#41;; // Strike through
		$text = preg_replace&#40;"&#40;\&#91;font=&#40;.+?&#41;\&#93;&#40;.+?&#41;\&#91;\/font\&#93;&#41;", '<span style="font-family&#58; $1;">$2</span>', $text&#41;; // Font
		$text = preg_replace&#40;"&#40;\&#91;color=&#40;.+?&#41;\&#93;&#40;.+?&#41;\&#91;\/color\&#93;&#41;is", '<span style="color&#58; $1">$2</span>', $text&#41;; // Color
		$text = preg_replace&#40;"&#40;\&#91;size=&#40;.+?&#41;\&#93;&#40;.+?&#41;\&#91;\/size\&#93;&#41;is", '<span style="font-size&#58; $1px">$2</span>', $text&#41;; // Font-Size
		$text = preg_replace&#40;"/\&#91;list\&#93;&#40;.+?&#41;\&#91;\/list\&#93;/is", '<ul class="bbcode_ul">$1</ul>', $text&#41;; // List
		$text = str_replace&#40;"&#91;*&#93;", "<li>", $text&#41;; // List-Item
		$text = str_replace&#40;"&#91;/*&#93;", "</li>", $text&#41;; // List-Item

		// Code and Quote Tags
		$text = preg_replace&#40;"&#40;\&#91;code\&#93;&#40;.+?&#41;\&#91;\/code\&#93;&#41;is", '<span class="code">$1</span>', $text&#41;; // Code
		$text = preg_replace&#40;"&#40;\&#91;quote\&#93;&#40;.+?&#41;\&#91;\/quote\&#93;&#41;is", '<span class="code">$1</span>', $text&#41;; // Quote

		$text = preg_replace&#40;"/\&#91;img\&#93;&#40;.+?&#41;\&#91;\/img\&#93;/", '<img src="$1" alt="" />', $text&#41;; // Image
		$text = preg_replace&#40;"/\&#91;img\=&#40;&#91;0-9&#93;*&#41;x&#40;&#91;0-9&#93;*&#41;\&#93;&#40;.+?&#41;\&#91;\/img\&#93;/", '<img src="$3" height="$2" width="$1" />', $text&#41;; // Image with width and height

		$text = preg_replace&#40;"/\&#91;url\&#93;&#40;&#91; a-zA-Z0-9\&#58;\/\-\?\&\.\=\_\~\#\'&#93;*&#41;\&#91;\/url\&#93;/", '<a href="$1" rel="nofollow" title="$1" target="_blank">$1</a>', $text&#41;; // Url
       	$text = preg_replace&#40;"&#40;\&#91;url\=&#40;&#91; a-zA-Z0-9\&#58;\/\-\?\&\.\=\_\~\#\'&#93;*&#41;\&#93;&#40;.+?&#41;\&#91;/url\&#93;&#41;", '<a href="$1" rel="nofollow" title="$2" target="_blank">$2</a>', $text&#41;; // Url with text

		$text = preg_replace&#40;"&#40;\&#91;mail\&#93;&#40;&#91; a-zA-Z0-9\&#58;\/\-\?\&\.\=\_\~\#\' a-zA-Z0-9\.@&#93;*&#41;\&#91;/mail\&#93;&#41;", '<a href="mailto&#58;$1" title="$1">$1</a>', $text&#41;; // Mail
       	$text = preg_replace&#40;"/\&#91;mail\=&#40;&#91; a-zA-Z0-9\&#58;\/\-\?\&\.\=\_\~\#\' a-zA-Z0-9\.@&#93;*&#41;\&#93;&#40;.+?&#41;\&#91;\/mail\&#93;/", '<a href="mailto&#58;$1" title="$2">$2</a>', $text&#41;; // Mail with text

		$youtube_replacement = '<object style="width&#58;425px; height&#58;350px;">';
		$youtube_replacement .= '<param name="movie" value="http&#58;//www.youtube.com/v/$1"></param>';
		$youtube_replacement .= '<param name="wmode" value="transparent"></param>';
		$youtube_replacement .= '<embed src="http&#58;//www.youtube.com/v/$1" wmode="transparent" type="application/x-shockwave-flash" style="width&#58;425px; height&#58;350px;"></embed>';
		$youtube_replacement .= '</object>';
		$text = preg_replace&#40;"/\&#91;youtube\&#93;&#40;.+?&#41;\&#91;\/youtube\&#93;/", $youtube_replacement, $text&#41;; // YouTube

		$youtube_replacement = '<object style="width&#58;$1px; height&#58;$2px;">';
		$youtube_replacement .= '<param name="movie" value="http&#58;//www.youtube.com/v/$3"></param>';
		$youtube_replacement .= '<param name="wmode" value="transparent"></param>';
		$youtube_replacement .= '<embed src="http&#58;//www.youtube.com/v/$3" wmode="transparent" type="application/x-shockwave-flash" style="width&#58;$1px; height&#58;$2px;"></embed>';
		$youtube_replacement .= '</object>';
		$text = preg_replace&#40;"/\&#91;youtube=&#40;&#91;0-9&#93;*&#41;x&#40;&#91;0-9&#93;*&#41;\&#93;&#40;.+?&#41;\&#91;\/youtube\&#93;/", $youtube_replacement, $text&#41;; // YouTube with width/height

		$googlevid_replacement = '<object style="width&#58;400px; height&#58;326px;">';
		$googlevid_replacement .= '<param name="movie" value=http&#58;//video.google.com/googleplayer.swf?docId=$1"></param>';
		$googlevid_replacement .= '<embed src="http&#58;//video.google.com/googleplayer.swf?docId=$1" wmode="transparent" style="width&#58;400px; height&#58;326px;" ';
		$googlevid_replacement .= 'id="VideoPlayback" type="application/x-shockwave-flash" flashvars=""></embed>';
		$text = preg_replace&#40;"/\&#91;googlevid\&#93;&#40;.+?&#41;\&#91;\/googlevid\&#93;/", $googlevid_replacement, $text&#41;; // Google Video

		$googlevid_replacement = '<object style="width&#58;$1px; height&#58;$2px;">';
		$googlevid_replacement .= '<param name="movie" value=http&#58;//video.google.com/googleplayer.swf?docId=$3"></param>';
		$googlevid_replacement .= '<embed src="http&#58;//video.google.com/googleplayer.swf?docId=$3" wmode="transparent" style="width&#58;$1px; height&#58;$2px;" ';
		$googlevid_replacement .= 'id="VideoPlayback" type="application/x-shockwave-flash" flashvars=""></embed>';
		$text = preg_replace&#40;"/\&#91;googlevid=&#40;&#91;0-9&#93;*&#41;x&#40;&#91;0-9&#93;*&#41;\&#93;&#40;.+?&#41;\&#91;\/googlevid\&#93;/", $googlevid_replacement, $text&#41;; // Google Video with width/height

		$text = str_replace&#40;"  ", "&nbsp; ", $text&#41;;
		$text = str_replace&#40;"\t", "&nbsp; &nbsp;", $text&#41;;

		return &#40;$text&#41;;
	&#125; // end parsetags&#40;&#41; function
&#125; // end class

Το function e() είναι αυτό (το χρησιμοποιώ για short):

Κώδικας: Επιλογή όλων

function e&#40;$input&#41; &#123;
	return &#40;!empty&#40;$input&#41;&#41; ? htmlspecialchars&#40;$input&#41; &#58; false;
&#125;
Ευχαριστώ εκ των προταίρων,
Γιώργος.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

PHP BBcode class

Δημοσίευση από pimpogio » 25 Αύγ 2011 17:35

χεσε τα bbcodes και δες αυτο
http://htmlpurifier.org

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP BBcode class

Δημοσίευση από kapoios001 » 25 Αύγ 2011 17:37

ωραίο αν και αυτό δεν απαντάει στο πρόβλημά μου. Μπορείς να μου πεις what am i missing here?

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

PHP BBcode class

Δημοσίευση από pimpogio » 25 Αύγ 2011 18:42

για αλλαξε αυτη τη γραμμη
$text = nl2br(e($text));
σε
$text = e($text);

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP BBcode class

Δημοσίευση από kapoios001 » 25 Αύγ 2011 18:44

ναι το έκανα μετά μου τα εμφανίζει όλα χωρίς <br /> λες και είναι ένα κείμενο.

Ενώ κανονικά θέλω όταν πατάω enter και με πάει σε νέα γραμμή να αφήνει κενό όπως και σε όλα τα bbcodes

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

PHP BBcode class

Δημοσίευση από pimpogio » 26 Αύγ 2011 16:20

για κανε τοτε αυτο

$text = e($text) . "\n";

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP BBcode class

Δημοσίευση από kapoios001 » 26 Αύγ 2011 16:51

Ναι το μόνο που κάνει το "\n" είναι να βάζει μια γραμμή. Κάτι που από μόνο του όπως βλέπω στον κώδικα γίνεται από το class.

Πάλι σε μια γραμμή τα εμφανίζει. Όταν βάζω το nl2br() στο τέλος του function μου το εμφανίζει πάλι με <br /> στα <li> items.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

PHP BBcode class

Δημοσίευση από pimpogio » 26 Αύγ 2011 17:55

το προβλημα σου τοτε ειναι στο css μαλλον
για δωσε τον html κωδικα που σου βγαζει

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες