Seite 2 von 2

Verfasst: 31.12.2006 00:22
von friedels-home
Leider musste ich feststellen, dass das nur eine Teillösung ist. In den Überschriften kann man immer noch kein Unicode verwenden. Weiß jemand, wo die Maskierung für die Überschriften gemacht wird?



@Olli Oberhausen: Und wo ist der Vorteil? Wozu soll das & maskiert werden?

Verfasst: 07.01.2007 22:19
von friedels-home
Ich habe immer noch keine Lösung gefunden und die falsche Anzeige der Überschriften stört sehr.

Die & werden als & in die phpbb_topics eingetragen. Weiß denn keiner, wo das maskiert wird? Ich habe es, wahrscheinlich wegen meinen mangelhaften Phpkenntnissen, nicht gefunden.

Verfasst: 08.01.2007 19:08
von Olli Oberhausen
Die & werden in der functions_posts.php Umgewandelt.

Code: Alles auswählen

	// Check subject
	if (!empty($subject))
	{
		$subject = htmlspecialchars(trim($subject));
	}

Eine alternative wäre vielleicht:

Code: Alles auswählen

	
	// Check subject
	if (!empty($subject))
	{
		$subject = preg_replace($html_entities_match, $html_entities_replace, $subject);
	}
Dann aber:
global $html_entities_match, $html_entities_replace;
in der funktion nicht vergessen.

EDIT: Habs mal getestet - geht...
& wird maskiert, &# 9603; &# 9604; &# 9605; &# 9606; &# 9607; &# 9608; jedoch nicht...
Olli

Verfasst: 09.01.2007 08:08
von friedels-home
Danke für die Bemühung. Leider verstehe ich nicht, was du mir sagen willst.
Olli Oberhausen hat geschrieben:Dann aber:
global $html_entities_match, $html_entities_replace;
in der funktion nicht vergessen.
Was bedeutet das? In welcher Funktion soll ich was machen?

Verfasst: 09.01.2007 10:30
von Olli Oberhausen
// Check Subject wird in der Funktion prepare_post() durchgeführt.

Da dort die variablen $html_entities_match und $html_entities_replace benötigt werden, mußt du sie erst globalisieren.

Dazu einfach $html_entities_match, $html_entities_replace in die erste zeile der funktion eintragen:

Hier mal der ganze code:

Ersetze (in der datei functions_post.php):

Code: Alles auswählen

$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#');
$html_entities_replace = array('&', '<', '>', '"');
mit:

Code: Alles auswählen

$html_entities_match = array('#&(?!(\#\d{2,4};|\w{2,6};))#', '#<#', '#>#', '#"#');
$html_entities_replace = array('&', '<', '>', '"');
Ersetze (in der funktion prepare_post):

Code: Alles auswählen

   // Check subject
   if (!empty($subject))
   {
      $subject = htmlspecialchars(trim($subject));
   }
Mit:

Code: Alles auswählen

	if (!empty($subject))
	{
		$subject = preg_replace($html_entities_match, $html_entities_replace, $subject);
	}
Ersetze (in der funktion prepare_post):

Code: Alles auswählen

	global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path;
Mit:

Code: Alles auswählen

	global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path, $html_entities_match, $html_entities_replace;

Verfasst: 10.01.2007 07:16
von friedels-home
Wenn ich das richtig sehe, wird dann z.B. & und &hearts; und > maskiert. Das darf doch nicht maskiert werden. Und mir ist immer noch nicht klar, wozu das & maskiert werden soll.

Verfasst: 10.01.2007 08:49
von Olli Oberhausen
Ein alleinstehendes & wird in & amp; umgewandelt und < > auch, alle anderen bleiben wie sie sind...

so wolltest du das doch haben....

Olli

Verfasst: 13.01.2007 10:56
von friedels-home
Es wird wohl Zeit, dass ich endlich mal Zeit finde um mich etwas mehr mit Php zu befassen.

Ich muss das mit dem Unicode erst mal etwas zurückstellen. Wichtiger ist, dass die bereits eingebauten Änderungen richtig funktionieren. Ich habe festgestellt, dass es mit der jetzigen Unicodelösung Probleme gibt. In meinem Board wird oft Quellcode gepostet. Im Moment habe ich keine Zeit um mich damit ausreichend auseinander zu setzen. Ich melde mich wieder, wenn ich mehr Zeit habe. Jedenfalls ist es jetzt so, dass die maskierten Zeichen so in der Datenbank stehen, wie sie eingegeben wurden. Aber wenn man einen Beitrag editiert, ändert sich das. Wenn ich also z.B. &amp;amp; in das Textfeld eingebe, erscheint im Posting &amp;. Das soll auch so sein. In der Datenbank steht dann auch &amp;amp;. Aber wenn man auf Editieren klickt, steht im Textfeld nur noch &amp;, wie es vorher im Posting stand. Wenn man also an dieser Stelle nichts editiert (sondern wo anders im selben Posting), ändert sich der Eiontrag in der Datenbank. Das darf natürlich nicht sein.