Seite 1 von 1
GET, Javaskript und Umlaute
Verfasst: 17.11.2008 22:09
von Martin Truckenbrodt
Hallo,
ich habe eine Problem mit nicht korrekt Umlauten bei folgendem Problem:
Ich sende den Inhalt eines textarea Formular Feldes mit der GET Methode und der phpBB3 popup Javscript Funktion in ein Popup Fenster.
Dort bekomme ich die Umlaute nicht korrekt angezeigt.
Hat das schon mal jemand hinbekommen?
Gruß Martin
Verfasst: 18.11.2008 20:53
von igorw
Ich habe den verdacht, dass die variable nicht durch escape() geschickt wurde. Im javascript code.
Verfasst: 18.11.2008 21:15
von Martin Truckenbrodt
Hallo evil<3 (der selbe wie auf phpbb.com ? ),
mittlerweile habe ich es zumindest zum Funktionieren gebracht:
http://www.phpbb.com/community/viewtopi ... 5#p7761865
Aber ich werde morgen mal Deine Antwort verfolgen, da es mir immer lieber ist möglichst viel phpBB3 Funktionalität zu nutzen anstatt z.B wie hier mehrerer einzelner PHP Funktionen.
Danke und Gruß Martin
Verfasst: 18.11.2008 22:38
von igorw
Hallo evil<3 (der selbe wie auf phpbb.com ? ),
Korrekt.
Deine lösung wird mit speziellen zeichen anderer sprachen nicht funktionieren. Der string ist UTF-8 enkodiert. Und das sollte er bleiben. Das problem ist, das du mit javascript eine URL ansteuern willst, die diesen string beinhaltet.
Nun, in PHP müsste man urlencode() verwenden. Da du das ganze jedoch (soweit ich es richtig verstanden habe) mit javascript machst, musst du escape() verwenden, was die äquivalente funktion ist.
Dadurch werden spezielle zeichen hexadezimal enkodiert (ein ' wird zum beispiel zu %27, man kann das auch in der ASCII tabelle nachschauen).
Verfasst: 19.11.2008 01:27
von Martin Truckenbrodt
Hallo evil<3,
phpbb.com:
na dann werde ich das nächste mal Deutsch mit Dir reden, wenn Du beim Validieren eines meiner MODs mal wieder Probleme feststellst! Für beiden Seiten einfacher, oder?
Code:
Ich habe so was schon erwartet bzw. mir schon gedacht. Ich werde den MOD heute anpassen. Danke für die Infos! Mir ist jetzt auch einiges klarer als vorher.
Vielleicht bekomme ich den MOD die Woche noch fertig. Keine Angst! Wird erst einmal eine Beta Version!
Danke und Gruß Martin
Verfasst: 19.11.2008 10:24
von Martin Truckenbrodt
Hallo evil<3,
urlencode() muss ich wohl trotzdem zusätzlich benutzen, oder?
Gruß Martin
Verfasst: 19.11.2008 12:42
von igorw
Das kommt auf deinen code drauf an. Beides sollte nicht nötig sein, entweder urlencode (PHP) oder escape (JS). Wenn du deinen code postest, lässt sich dir etwas besser helfen.
Verfasst: 19.11.2008 14:50
von Martin Truckenbrodt
Hallo evil<3,
ein Problem sind eventuell enthaltene Leerzeichen. Außerdem müßte ich zumindest noch nl2br drüber lassen.
Hier mal ein bißchen Code:
Die URL fürs PopUp wird hiermit gebildet:
Code: Alles auswählen
switch ($preview)
{
case 'html':
$template->assign_vars(array(
'S_PREVIEW_HTML' => true,
'UA_POPUP_PREVIEW_HTML' => addslashes(append_sid("{$phpbb_root_path}includes/newsletter/html.$phpEx", 'n=' . $newsletter_id . '&subject=' . $db->sql_escape($subject) . '&message=' . $db->sql_escape($message))),
));
break;
case 'plain':
$template->assign_vars(array(
'S_PREVIEW_PLAIN' => true,
'UA_POPUP_PREVIEW_PLAIN' => addslashes(append_sid("{$phpbb_root_path}includes/newsletter/plain.$phpEx", 'n=' . $newsletter_id . '&subject=' . $db->sql_escape($subject) . '&message=' . $db->sql_escape($message))),
));
}
Hier die HTML Preview Seite:
Code: Alles auswählen
<?php
/**
*
* @package Multiple Newsletters Add On
* @version $Id: html.php, v 1.000 2006/07/23 Martin Truckenbrodt Exp$
* @copyright (c) 2006 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
define('IN_PHPBB', true);
$phpbb_root_path = '../../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
include($phpbb_root_path . 'includes/newsletter/constants.'.$phpEx);
include($phpbb_root_path . 'includes/newsletter/functions.'.$phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('mods/newsletter');
$server_url = generate_board_url();
$email_id = request_var('e', 0);
$newsletter_id = request_var('n', 0);
if ($email_id)
{
$sql = 'SELECT email_subject, email_text, email_text_bitfield, email_text_uid, email_text_options, user_id FROM ' . NEWSLETTER_EMAIL_TABLE . '
WHERE email_id =' . $email_id;
$result = $db->sql_query($sql);
$email_row = $db->sql_fetchrow($result);
}
else
{
$bbcode_status = ($config['allow_bbcode'] && $config['allow_newsletter_bbcode']) ? true : false;
$url_status = ($config['allow_newsletter_links']) ? true : false;
$email_row['email_subject'] = request_var('subject', '', true);
$email_row['email_text'] = request_var('message', '', true);
$email_row['user_id'] = $user->data['user_id'];
generate_text_for_storage($email_row['email_text'], $email_row['email_text_uid'], $email_row['email_text_bitfield'], $email_row['email_text_options'], $bbcode_status, $url_status, '');
}
$email_row['email_subject'] = htmlentities(mb_convert_encoding($email_row['email_subject'],"ISO-8859-1","UTF-8"));
$email_row['email_text'] = htmlentities(mb_convert_encoding($email_row['email_text'],"ISO-8859-1","UTF-8"));
if (!$newsletter_id)
{
$sql = 'SELECT newsletter_id FROM ' . NEWSLETTER_EMAIL_TABLE . '
WHERE email_id = ' . $email_id;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row)
{
trigger_error('NO_NEWSLETTER');
}
else
{
$newsletter_id = $row['newsletter_id'];
}
}
$sql = 'SELECT newsletter_name, newsletter_public, newsletter_css, newsletter_footer, newsletter_footer_bitfield, newsletter_footer_uid, newsletter_footer_options FROM ' . NEWSLETTER_TABLE . '
WHERE newsletter_id = ' . $newsletter_id;
$result = $db->sql_query($sql);
$newsletter_row = $db->sql_fetchrow($result);
if (!$newsletter_row)
{
trigger_error('NO_NEWSLETTER');
}
if (!newsletter_is_viewable($user->data['user_id'], $newsletter_id, $newsletter_row['newsletter_public']))
{
trigger_error('NEWSLETTER_NOT_ALLOWED');
}
if (!$newsletter_row['newsletter_css'])
{
$sql = 'SELECT theme_id FROM ' . STYLES_TABLE . '
WHERE style_id = ' . $user->data['user_style'];
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$sql = 'SELECT theme_path FROM ' . STYLES_THEME_TABLE . '
WHERE theme_id = ' . $row['theme_id'];
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$newsletter_row['newsletter_css'] = "<link rel=\"stylesheet\" href=\"" . $server_url . "/styles/" . $row['theme_path'] . "/theme/stylesheet.css \" />
<link rel=\"stylesheet\" href=\"". $server_url . "/styles/" . $row['theme_path'] . "/theme/email.css \" />";
}
else
{
$newsletter_row['newsletter_css'] = "<link rel=\"stylesheet\" href=\"" . $newsletter_row['newsletter_css'] . "\" />";
}
echo '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" dir=\"' . $user->lang['DIRECTION'] . '\" lang=\"' . $user->lang['USER_LANG'] . '\" xml:lang=\"' . $user->lang['USER_LANG'] . '\">
<head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />
<meta http-equiv=\"content-style-type\" content=\"text/css\" />
<meta http-equiv=\"content-language\" content=\"' . $user->lang['USER_LANG'] . '\" />
<meta http-equiv=\"imagetoolbar\" content=\"no\" />
<title>' . $newsletter_row['newsletter_name'] . ' ' . $email_row['email_subject'] . '</title>
' . $newsletter_row['newsletter_css'] . '
</head>
<body>
<div class="email">
<h2 class="email">' . $newsletter_row['newsletter_name'] . '</h2>
<h1 class="email">' . $email_row['email_subject'] . '</h1>
<br />
<h2 class="email">' . $user->lang['NEWSLETTER_WELCOME'] . ' ' . $user->data['username'] . ',</h2>
<br />
<p class="email">' . generate_text_for_display($email_row['email_text'], $email_row['email_text_uid'], $email_row['email_text_bitfield'], $email_row['email_text_options']) . '</p>
<br />
<p class="email">' . generate_text_for_display($newsletter_row['newsletter_footer'], $newsletter_row['newsletter_footer_uid'], $newsletter_row['newsletter_footer_bitfield'], $newsletter_row['newsletter_footer_options']) . '</p>
<br />
' . build_email_sender($email_id, $email_row['user_id']) . '
<p class="email">' . build_email_sender_signature($email_id, $email_row['user_id']) . '</p>
<br />
<p class="email">' . nl2br($config['board_email_sig']) . '</p>
</div>
</body>
</html>';
?>
Im Moment kämpfe ich allerdings mit dem LOG System um die MCP Aktivitäten zu protokollieren.
Gruß Martin