function censor_text($text)

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
MichaelJason
Mitglied
Beiträge: 16
Registriert: 27.02.2007 10:50

function censor_text($text)

Beitrag von MichaelJason »

Hi hat jemand von euch eine Idee wie ich vor und hinter das Suchwort (Array) ein Leerzeichen bekommen kann?
Ich möchte bestimmte Wörter durch Links ersetzen und zwar nur solche die im Texte frei stehend sind. Aus diesem Grund
möchte ich dem Suchwort ein Leerzeichen anhängen, damit er nicht auf die Idee kommt Wörter in einer
zusammenhängenden Zeichenkette auszutauschen.

Beispiel: Ich fliege heute mit einem Flugzeug nach London
Flugzeug wird durch den Link <a href="http://www.flugticket.de" titel="Flugticket">Flugzeug</a> ausgetauscht.

Wenn jemand z.B: http://www.flugzeug.de schreibt möchte ich NICHT das es ausgetauscht wird.

functions_content.php

Code: Alles auswählen

/**
* Censoring
*/
function censor_text($text)
{
	static $censors;

	// Nothing to do?
	if ($text === '')
	{
		return '';
	}

	// We moved the word censor checks in here because we call this function quite often - and then only need to do the check once
	if (!isset($censors) || !is_array($censors))
	{
		global $config, $user, $auth, $cache;

		// We check here if the user is having viewing censors disabled (and also allowed to do so).
		if (!$user->optionget('viewcensors') && $config['allow_nocensors'] && $auth->acl_get('u_chgcensors'))
		{
			$censors = array();
		}
		else
		{
			$censors = $cache->obtain_word_list();
		}
	}

	if (sizeof($censors))
	{
	  // Anhängen von leerzeichen damit die Wörter richtig ausgetauscht werden.
          $mig_word = " ". $censors['match']. " ";                                                                          // Das geht dummerweise nicht 
	  $mig_replace = " ". $censors['replace']. " ";  
	  return preg_replace($mig_word, $mig_replace, $text);
	}

	return $text;
}
Zuletzt geändert von Dr.Death am 04.10.2010 11:02, insgesamt 1-mal geändert.
Grund: BBCode [code] hinzugefügt.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: function censor_text($text)

Beitrag von gn#36 »

Die Ausdrücke in $censors['match'] sind Reguläre Ausdrücke, die Anführungszeichen müssen "innen drin" eingefügt werden, da der Suchausdruck bei Regulären Ausdrücken noch in "Delimiter", also Begrenzungszeichen, eingeschlossen ist. Ein Beispiel für einen regulären Ausdruck wäre: "/karl-heinz-[Oo]tto/s". Gesucht wird nach karl-heinz-otto und karl-heinz-Otto, ein Leerzeichen vorne und hinten würde lediglich den Delimiter ändern (auf Leerzeichen) und würde damit nur dazu führen, dass der ursprüngliche Ausdruck auch nicht mehr gefunden werden kann, da (in obigem Beispiel) dann nach /karl-heinz-otto/s und /karl-heinz-Otto/s gesucht wird. Wenn du es an dieser Stelle ändern möchtest musst du also deine Leerzeichen innerhalb der Delimiter einfügen, also als zweites Zeichen und eine gewisse Zahl an Zeichen vor Ende des Strings. Wo genau lässt sich nur sagen wenn man weiß, wie viele "Modifier" nach dem Delimiter noch kommen (das ist oben das "s", hier gibt es noch ein paar Steuerbefehle die dort stehen können).

Ansonsten solltest du lieber direkt bei den Strings ansetzen, d.h. erst mal schauen wo die aus der DB geholt werden und dann dort die Leerzeichen einfügen. Oder direkt mit in die DB hinein, dann kannst du auch trotzdem Worte überall ersetzen lassen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“