Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Umlaute ersetzen, damit Dateiname gültig ist... [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Umlaute ersetzen, damit Dateiname gültig ist...


 
israelsson
21-11-2004, 06:17 
 
hey!

ich hab schon in Forum gesucht, aber nichts gefunden was mir wirklich weiterhilft!

Ich möchte durch ein Formular ein Steckbriefmuster erstellen, wobei der Steckbrief anschließens als HTML datei gespreichert werden soll.
Der Dateiname setzt sich aus den ersten beiden Buchstaben des Vornamens und dem kompletten Nachnamen zusammen:

$vorname_str = strtolower(substr($vorname, 0, 2));
$nachname_str = strtolower($nachname);
$dateiname = "$vorname_str$nachname_str.html";

Das funktioniert auch alles, aber wenn in dem Nachnamen nun ein ä ü oder ö (Müller) oder bei falscher eingabe vielleicht auch ein ß eingegeben wird, ist der Dateiname nicht mehr gültig!

Wie kann ich den Vornamen und Nachnamen auf Umlaute überprüfen, und diese, wenn sie gefunden wurden, ersetzen durch ae, ue, oe und ss...

Danke für jede Hilfe im Voraus!

MFG Israel's Son

 
Günni
21-11-2004, 09:38 
 
http://www.php.net/manual/de/function.substr-replace.php
http://us2.php.net/manual/de/function.preg-replace.php

 
israelsson
21-11-2004, 12:35 
 
Danke!

// Umlaute entfernen
$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss");
$vorname_neu = preg_replace($umlaute, $replace, $vorname);
$nachname_neu = preg_replace($umlaute, $replace, $nachname);

// Dateiname wird erstellt
$vorname_str = strtolower(substr($vorname_neu, 0, 2));
$nachname_str = strtolower($nachname_neu);
$dateiname = "$vorname_str$nachname_str$dateiendung";

Jetzt funktioniert es!

kannte preg_replace() vorher garnich...

Besten Danke!

MFG Israel's Son

 
penizillin
21-11-2004, 17:10 
 
weiß nicht, ob's sinnvoll ist, aber man kann den modifier /i benutzen, da du die strings doch eh alle strlower() setzst.

 
Boron
03-06-2006, 12:33 
 
*rauskram*

mal ne Frage: Ist es hier sinnvoller preg_replace() oder str_replace() zu benutzen um die Umlaute zu ersetzen?

 
onemorenerd
03-06-2006, 12:56 
 
str_replace(): "Falls Sie keine ausgefallenen String-Ersetzungen brauchen, sollten Sie immer dieser Funktion den Vorzug vor ereg_replace() oder preg_replace() geben. "

 
d.pioch
06-06-2006, 18:58 
 
Leider funktioniert die str_replace bei mir nicht richtig.

Sonderzeichen wie ä usw. ersetzt er, ß aber nicht!!!

So sieht die Befehlszeile aus:

$row2['products_description'] = str_replace("/ß/","ss",$row2['products_description']);

Habe ich hier jetzt einen ganz blöder Ferhler drin? Wie gesagt andere Zeichen ersetzt er.

Woran könnte es noch liegen?

Vielen Dank.

 
Morri
06-06-2006, 19:00 
 
Original geschrieben von d.pioch
Leider funktioniert die str_replace bei mir nicht richtig.

Sonderzeichen wie ä usw. ersetzt er, ß aber nicht!!!

So sieht die Befehlszeile aus:

$row2['products_description'] = str_replace("/ß/","ss",$row2['products_description']);

Habe ich hier jetzt einen ganz blöder Ferhler drin? Wie gesagt andere Zeichen ersetzt er.

Woran könnte es noch liegen?

Vielen Dank.


probier mal


$row2['products_description'] = str_replace("ß","ss",$row2['products_description']);

 
d.pioch
07-06-2006, 09:06 
 
habe ich zuerst so gehabt, funktioniert aber auch nicht.

 
onemorenerd
07-06-2006, 11:46 
 
Ja genau, dein PHP ist kaputt. :rolleyes:

 
d.pioch
07-06-2006, 11:54 
 
So weit ich weiß läuft Php bei usnerem Provider auf der neusten Version...

 
mrhappiness
07-06-2006, 11:57 
 
<?php
$alt = 'Maße';
$neu = str_replace('ß', 'ss', $alt);
echo 'alt: '.$alt.'<br />';
echo 'neu: '.$neu;
?>Ausgabe?

 
d.pioch
07-06-2006, 12:01 
 
Ausgabe:

alt: Maße
neu: Masse


scheint also so zu funktionieren...

 
mrhappiness
07-06-2006, 12:38 
 
Und was folgern wir draus?

 
d.pioch
07-06-2006, 13:21 
 
Wir folgern daraus, dass da also etwas im Quelltext nicht stimmt.

Kann da aber keinen Fehler entdecken!
Wäre für Hilfe echt dankbar.

 
onemorenerd
07-06-2006, 13:32 
 
Na dann zeig doch mal her!

 
d.pioch
07-06-2006, 13:40 
 
reicht diese Zeile (wie oben gepostet) nicht?

$row2['products_description'] = str_replace('ß','ss',$row2['products_description']);

wie gesagt mit anderen Zeichen und mit Umlauten funktioniert die ganze Geschichte!

$row2['products_description'] = str_replace("ä","ae",$row2['products_description']);
$row2['products_description'] = str_replace("function NewWindow","",$row2['products_description']);


woran kann es denn liegen?

Braucht Ihr noch mehr Quelltext?

 
onemorenerd
07-06-2006, 13:54 
 
Dass auch bei dir die Funktion str_replace() das tut, was man von ihr erwartet, hast du schon mit dem Schnipsel von mrhappiness überprüft. Insofern helfen die drei Zeilen Code nicht weiter. :(

 
d.pioch
07-06-2006, 14:01 
 
Die Datei stammt aus OS-Commerce Froogle Exporter.
Sie ist knapp 2000 Zeilen lang.

Denke nicht, dass ich hier die ganze Datei posten soll oder?


Kann man den Fehler nicht irgendwie eingrenzen?


Danke im Voraus

 
onemorenerd
07-06-2006, 14:15 
 
Ja klar kannst DU den Fehler eingrenzen. Aber irgendwie habe ich das Gefühl, dass du überhaupt nichts in dieser Richtung unternimmst.

Du weißt, dass eine einzige Anweisung - die Ersetzung aller ß - nicht funktioniert. Aber woher? Hast du Testausgaben gemacht?

echo $var
$var = str_replcae('ß', 'ss', $var);
echo $var;

 
wahsaga
07-06-2006, 14:16 
 
Ggf. falsche/nicht übereinstimmende Zeichenkodierungen - so dass ein 'ß' in deinen Daten nicht gleich einem 'ß' in deinem Script ist ...?

 
d.pioch
07-06-2006, 15:32 
 
Natürlich unternehme ich etwas in dieser Richtung!

Ich mache ständig Testausgaben der kompletten Froggle Datei. Dieser Froogle Exporter exportiert alle Artikel des Online Shops in eine Textdatei.

Ich ändere kleinere Dinge wie Anführungszeichen, Hochkomma, habe hier in dem Thread gesehen eventuell mit /ß/. Funktioniert aber auch nicht. Habe bereits (ob Sinnvoll oder nicht) es mit &szlig; oder mit
ß probiert.

Bin aber mit meinem Latein am Ende.

Ggf. falsche/nicht übereinstimmende Zeichenkodierungen - so dass ein 'ß' in deinen Daten nicht gleich einem 'ß' in deinem Script ist ...?

Wie kann ich das denn nachvollziehen?

 
pascy
26-05-2008, 21:32 
 
hallo,

vielleicht kommt ja noch jemand mit der gleichen Frage über diesen Thread:

mir hat folgender Eintrag geholfen:


$vCard = htmlentities($vCard,ENT_COMPAT,'UTF-8');
$vCard = html_entity_decode($vCard,ENT_COMPAT,'ISO-8859-1');


lg
Paul

 
tontechniker
26-05-2008, 21:37 
 
$vCard = htmlentities($vCard,ENT_COMPAT,'UTF-8');
$vCard = html_entity_decode($vCard,ENT_COMPAT,'ISO-8859-1'); == utf8_decode ( $vCard );

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.