Seite 1 von 2

private Nachricht auf str durchsuchen?

Verfasst: 09.05.2009 00:06
von tuxx123
Servus,

ich möchte gerne die privaten Nachrichten vor dem Absenden, durchsuchen nach divesen Zeichen wie z.B. alle Umlaute. DIese möchte ich dann mittels str_replace ersetzen bzw. umwandeln.

kann mir Jemand verraten in welcher Datei ich meine Umwandlung hinzufügen kann? vielleicht sogar ca. an welcher Stelle? :)

danke...!

Re: private Nachricht auf str durchsuchen?

Verfasst: 09.05.2009 13:59
von oxpus
Öhm, ich verstehe zwar nicht ganz, was das für einen Sinn haben soll, aber bitte:
Mit der Datei includes/functions_privmsgs.php werden die PMs gespeichert.
Dort in der Funktion submit_pm(....) kannst Du letztmalig Einfluss auf die Inhalte nehmen, bevor sie in die Datenbank geschrieben werden.
Idealerweise spätestens vor

Code: Alles auswählen

	$sql = '';

	switch ($mode)
	{
		case 'reply':
		case 'quote':
			$root_level = ($data['reply_from_root_level']) ? $data['reply_from_root_level'] : $data['reply_from_msg_id'];
Dazu:
Der Titel der PM ist in $subject, der Text dagegen in $data['message'] enthalten.

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 11:46
von tuxx123
das geht bei mir irgendwie nicht?
kann mir Jemand die Position ca. sagen wo ich

Code: Alles auswählen

str_replace("ä", "ae", $data['message']);
str_replace("ü", "ue", $data['message']);
str_replace("ö", "oe", $data['message']);
einfügen sollte?!
ich will komplett die Umlaute deaktivieren, also dass sie komplett bei jeder PM umgewandelt werden,
kann mir da Jemand helfen? :(

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 12:28
von oxpus
Die Umlaute sollte eigentlich bereits als UTF-8-Code vorliegen.
Lasse dir doch mal mit

Code: Alles auswählen

echo ($data['message']);
einen Text anzeigen, der Umlaute enthält. Dann solltest du diesen Code sehen, den du dann ersetzen kannst.

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 13:49
von tuxx123
um es vielleicht etwas genauer zu erklären,
ich möchte wenn eine PM abgeschickt wird, dass diese PM, mit dme umgewandelten Umlauten in die DB gespeichert wird.
also ich möchte bei den PMs keine Umlaute in der Datenbank haben.

Also frage ich mich, wo ich am besten meinen Code einfüge, dass PHPBB es so speichert :>

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 14:26
von oxpus
tuxx123 hat geschrieben:um es vielleicht etwas genauer zu erklären,
ich möchte wenn eine PM abgeschickt wird, dass diese PM, mit dme umgewandelten Umlauten in die DB gespeichert wird.
also ich möchte bei den PMs keine Umlaute in der Datenbank haben.

Also frage ich mich, wo ich am besten meinen Code einfüge, dass PHPBB es so speichert :>
Warum eigentlich nicht?
Die werden doch mit UTF-8-Zeichen ersetzt und problemlos verwaltet?

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 14:40
von tuxx123
weil ich einen Fehler bekomme, dass ich zuwenig memory_size habe, sobald man eine PM mit Umlauten schreibt. Da mein Hoster 1€ im Monat will, dass er den Speicherbedarf für ein PHP-Script erhöht, will ich dies einfach umgehen und vor dem absenden die Umlaute umwandeln :)

also, kann mir da einer helfen an welche Stelle ich den Code packen muss?

Gruß

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 16:41
von oxpus
Ah ja. Dabei gibt es aber auch so viele Free Hoster, die hier weniger Beschränkungen haben. Musst Du aber wissen, da will ich dir nicht reinreden.

Okay, zum Thema:
Öffne die Datei includes/ucp/ucp_pm_compose.php, finde die Zeile

Code: Alles auswählen

		$message_parser->message = utf8_normalize_nfc(request_var('message', '', true));
und ersetze diese durch

Code: Alles auswählen

		$pm_message = request_var('message', '', true);
		$find_ary = array('ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß');
		$replace_ary = array('ae', 'Ae', 'oe', 'Oe', 'ue', 'Ue', 'ss');
		$pm_message = str_replace($find_ary, $replace_ary, $pm_message);
		$message_parser->message = utf8_normalize_nfc($pm_message);

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 16:53
von tuxx123
habs genau so gemacht, bringt allerdings noch immer den fehler wenn ich die PM absende, vielleicht doch noch an einer anderen stelle? :(
danke dir trotzdem, das müsste doch eigentlich gehen?!

Re: private Nachricht auf str durchsuchen?

Verfasst: 13.05.2009 17:19
von wolfman24
So wie ich das sehe ist der einzige Weg, die Speichermeldung zu vermeiden, den Speicher zu erhöhen, oder besser gesagt das Limit zu erhöhen. Was du da mit dem Ersetzen der Ü's durch UE's versucht bringt nichts, da das Problem ja nicht die Datenbank ist. Ich bin mir nicht sicher, aber das Problem wird die Zeile

Code: Alles auswählen

request_var('message', '', true)
sein, da hier die Nachricht in den Speicher gelesen und einer Variable übergeben wird. Die Verarbeitung der message im Speicher schlägt wegen der Umlaute fehl, die dürften halt gar nicht erst eingetippt werden.

Wie hoch ist denn der Wert von memory_size?

Kann auch sein, daß ich mich irre, ich bin halt kein Profi was php betrifft.