Schrift
[thread]812[/thread]

Variable aus URL kann nicht verwendet werden: unsichtbare Sonderzeichen?



<< >> 9 Einträge, 1 Seite
Superfrank
 2006-09-14 15:23
#8675 #8675
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
wenn jemand im passwortgeschützten Bereich keine Cookies verwendet wird die Session-ID und die Sprache über die URL weitergetragen und die Sprache mit

Code: (dl )
1
2
my $cgi = new CGI;
my $lang = $cgi->param('lang');


augelesens um später das Lexikon mit

Code: (dl )
my $lh = "lang::$lang"->get_handle("$lang" . '_welcome');


zu laden. Das funktioniert aber nur, wenn ich noch ein

Code: (dl )
$lang = 'de' if $lang eq 'de';


mache.

Code: (dl )
$lang = uri_escape($lang);


bringt leider nix. Hat da jemand einen Tip für mich?

Viele Grüsse

Frank
GwenDragon
 2006-09-14 15:30
#8676 #8676
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Lies halt über $ENV{HTTP_ACCEPT_LANGUAGE} oder Javascript die eingestellte Sprache aus.

Code: (dl )
$lang = 'de' if $lang eq 'de';

Das wäre Unfug. Du weist $lang den Wert de zu, wenn es schon de ist.
Möglicherweise wirfst du irgendwo Variablen mit verscheidenem Sichtbarkeitsbereich durcheinander.\n\n

<!--EDIT|GwenDragon|1158233672-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Superfrank
 2006-09-14 15:50
#8677 #8677
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
[quote=GwenDragon,14.09.2006, 13:30]Lies halt über $ENV{HTTP_ACCEPT_LANGUAGE} oder Javascript die eingestellte Sprache aus.

über $ENV{HTTP_ACCEPT_LANGUAGE} auslesen mache ich beim ersten Aufruf, wenn keine Sprache eingestellt ist, anschließend wandert dieser Wert in ein Cookie oder in die URL. Auschließlich $ENV{HTTP_ACCEPT_LANGUAGE} verwenden geht nicht weil er dann die Sprache nicht ändern kann.

Code: (dl )
$lang = 'de' if $lang eq 'de';

Das wäre Unfug. Du weist $lang den Wert de zu, wenn es schon de ist.


Selbstmurmelnd ist das Blödsinn, aber ich schwöre, daß es mit der Zeile geht und ohne nicht.

Möglicherweise wirfst du irgendwo Variablen mit verscheidenem Sichtbarkeitsbereich durcheinander.

Ja, habe ich auch schon überprüft, ist aber nicht der Fall. Ichhabe keinen blassen Schimmer was das zu bedeuten hat, notfalls wird für jede Sprache ein

$lang = 'de' if $lang eq 'de';[/quote]
Quote
Lies halt über $ENV{HTTP_ACCEPT_LANGUAGE} oder Javascript die eingestellte Sprache aus.


über $ENV{HTTP_ACCEPT_LANGUAGE} auslesen mache ich beim ersten Aufruf, wenn keine Sprache eingestellt ist, anschließend wandert dieser Wert in ein Cookie oder in die URL. Auschließlich $ENV{HTTP_ACCEPT_LANGUAGE} verwenden geht nicht weil er dann die Sprache nicht ändern kann.

Quote
Code: (dl )
$lang = 'de' if $lang eq 'de';

Das wäre Unfug. Du weist $lang den Wert de zu, wenn es schon de ist.


Selbstmurmelnd ist das Blödsinn, aber ich schwöre, daß es mit der Zeile geht und ohne nicht.

Quote
Möglicherweise wirfst du irgendwo Variablen mit verscheidenem Sichtbarkeitsbereich durcheinander.


Ja, habe ich auch schon überprüft, ist aber nicht der Fall. Ichhabe keinen blassen Schimmer was das zu bedeuten hat, notfalls wird für jede Sprache ein
Code: (dl )
1
2
$lang = 'de' if $lang eq 'de';
$lang = 'en' if $lang eq 'en';


gemacht.

Viele Grüsse

Frank
GwenDragon
 2006-09-14 16:20
#8678 #8678
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
[quote=Superfrank,14.09.2006, 13:23]
Code: (dl )
my $lh = "lang::$lang"->get_handle("$lang" . '_welcome');
[/quote]
Code: (dl )
"lang::$lang"->get_handle("$lang" . '_welcome');
???
"lang::$lang" ist doch eine Referenz, oder?

Nach deinem Beispiel mit lang de würde es zu:
Code: (dl )
"lang::de"->get_handle("$lang" . '_welcome');


Mir mangelt es da an Überblick deiner Module.\n\n

<!--EDIT|GwenDragon|1158236516-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Dubu
 2006-09-14 17:07
#8679 #8679
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Was passiert denn, wenn du die Zuweisung an $lang nicht machst?
Arbeitest du vielleicht im Taint-Mode?
Dann könnte es sein, dass diese Zuweisung einfach nur dafür sorgt, die Variable $lang zu "enttainten".
Superfrank
 2006-09-15 12:08
#8680 #8680
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
[quote=GwenDragon,14.09.2006, 14:20][quote=Superfrank,14.09.2006, 13:23]
Code: (dl )
my $lh = "lang::$lang"->get_handle("$lang" . '_welcome');
[/quote]
Code: (dl )
"lang::$lang"->get_handle("$lang" . '_welcome');
???
"lang::$lang" ist doch eine Referenz, oder?

Nach deinem Beispiel mit lang de würde es zu:
Code: (dl )
"lang::de"->get_handle("$lang" . '_welcome');


Mir mangelt es da an Überblick deiner Module.[/quote]
Guten Morgen,
Quote
Nach deinem Beispiel mit lang de würde es zu:
Code: (dl )
"lang::de"->get_handle("$lang" . '_welcome');


fast ;-) Es kommt

Code: (dl )
"lang::de"->get_handle("de" . '_welcome')


heraus.

lang::de ist die Projektklasse, die zur Laufzeit mit

Code: (dl )
require "lang/$lang.pm";


geladen wird. Jede auszuliefernde Seite hat sein eigenes Lexikon und das Handle wird wie oben erwähnt erzeugt. In einem anderen Thread hatte ich mich ja gewundert, warum das Handle nicht einfach welcome heißen kann, wenn ich die Doku zu

Locale::Maketext
(hab leider den cpan-Quote nicht hingekriegt)


verstanden habe, ist das gar nicht möglich. Das nur zur Erklärung warum es "de_welcome" anstatt nur "welcome" heißt.

Das alles funktioniert auch wunderbar, nur wenn die Sprache aus der URL kommt geht es nur mit der Zeile


Code: (dl )
$lang = 'de' if $lang eq 'de';



Viele Grüsse

Frank
Superfrank
 2006-09-15 12:19
#8681 #8681
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
[quote=Dubu,14.09.2006, 15:07]Was passiert denn, wenn du die Zuweisung an $lang nicht machst?
Arbeitest du vielleicht im Taint-Mode?
Dann könnte es sein, dass diese Zuweisung einfach nur dafür sorgt, die Variable $lang zu "enttainten".[/quote]
Moin,
Quote
Was passiert denn, wenn du die Zuweisung an $lang nicht machst?


dann kann ich mit der Sprachvariablen alles machen, nur das Laden der Sprachprojektklasse mit

Code: (dl )
require "lang/$lang.pm";


funktioniert nicht.
Es steht aber definitiv "de" drin wie das debug-Log verrät.

Taint-Mode wird nicht benutzt.

Viele grüsse

Frank
pq
 2006-09-15 13:52
#8682 #8682
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Superfrank,15.09.2006, 10:19]dann kann ich mit der Sprachvariablen alles machen, nur das Laden der Sprachprojektklasse mit

Code: (dl )
require "lang/$lang.pm";


funktioniert nicht.[/quote]
"funktioniert nicht" hilft keinem weiter, das ist keine fehlerbeschreibung.
stürzt dein computer ab oder was meinst du damit?
du machst ein require und benutzt danach sicher was aus dem modul,
das du geladen hast. wenn das require "nicht funktioniert", kannst
du das doch bestimmt an irgendetwas festmachen.
steht was im log?\n\n

<!--EDIT|pq|1158314011-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Superfrank
 2006-09-15 14:26
#8683 #8683
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
[quote=pq,15.09.2006, 11:52]du machst ein require und benutzt danach sicher was aus dem modul,
das du geladen hast. wenn das require "nicht funktioniert", kannst
du das doch bestimmt an irgendetwas festmachen.
steht was im log?[/quote]

nein, es steht nichts im Log. Im runmode "welcome" soll das Modul geladen werden und über die require-Zeile kommt der runmode nicht hinaus und es wird dann automatisch error_mode aufgerufen.
Keinerlei Hinweise über den Grund.

Viele Grüsse

Frank\n\n

<!--EDIT|Superfrank|1158316222-->
<< >> 9 Einträge, 1 Seite



View all threads created 2006-09-14 15:23.