Hallo liebe Leute,
ich habe folgendes Phänomen:
Ich lese mehrere Dateien per PHP in ein zweidimensionales PHP Array
for ($i = 0;$i < count($txtpfadarray);$i++)
{
$str = implode("", @file($txtpfadarray[$i])); // Textdatei auslesen
$str = str_replace("\n","",$str); // string von Umbruechen befreien
$str = str_replace("\r","",$str); // string von Umbruechen befreien
$begleittext = explode (",", $str); // in 1dim Array packen
for($k = 0;$k < count($begleittext);$k++) // in 2dim Array packen
$phptxtarray[$i][$k] = $begleittext[$k];
}
Ich habe es auch mit strafferem Code versucht, darum geht es hier auch nicht, dieser Code funktioniert und alles, was kürzer war, hat nicht zuverlässig gearbeiet.
Später im Programm übergebe ich dieses Array an JS
<script type="text/javascript">
<!--
jstxtarray= new Array();
<?php
for($i=0;$i<count($myphp2dimarray);++$i)
{
print "jstxtarray[$i] = new Array('".implode("','", $phptxtarray[$i])."');\n";
}
?>
//-->
</script>
Auch das funktioniert soweit. Bevor ich auf diese Lösung gekommen bin, hatte ich eine andere, nämlich
<script type="text/javascript">
jstxtarray[0] = new Array("<?php print(implode('","', $phptxtarray[0])); ?>");
jstxtarray[1] = new Array("<?php print(implode('","', $phptxtarray[1])); ?>");
//-->
</script>
Mir war bis dahin nicht klar, wie man beide Inkremente hochzählen kann, daher diese Bastellösung, wo jedes Arrayelement einzeln übergeben wird.
Aber nun kommt das, was ich nicht verstehe.
In einer meiner eingelesenen Textdateien gibt es einen Namen, der ein Hochkomma enthält - O' Neal
Bei meiner Bastellösung gab es kein Problem mit O' Neal
Bei der PHP Lösung bekam ich einen Fehler, der erst dann verschwand, als ich in der TXT Datei das Hochkomma maskiert habe. In der Datei steht also nun O\\' Neal. Das funktioniert, ist aber unbefriediegend. Nun habe ich versucht, beim Einlesen der Datei das Hochkomma durch ein maskiertes Hochkomma zu ersetzen.
etwa so.
$str = str_replace("'","\\'",$str);
Und da habe ich etliche Kombinationen durchprobiert, die aber allesamt offenbar falsch sind.
Nun habe ich zwei Fragen.
1. Kann mir jemand sagen, warum es bei meiner Bastellösung ohne Maskerade funktioniert und bei der php Lösung nicht?
2. Gibt es bei der php Stringbehandlung eine Möglichkeit, das Hochkomma so zu maskieren, dass die PHP Lösung im Java Script funktioniert?
Ich möchte nach Möglichkeit nicht die Originaldatei editieren müssen.
Schöne Grüsse aus HH
Rudolf
ich habe folgendes Phänomen:
Ich lese mehrere Dateien per PHP in ein zweidimensionales PHP Array
for ($i = 0;$i < count($txtpfadarray);$i++)
{
$str = implode("", @file($txtpfadarray[$i])); // Textdatei auslesen
$str = str_replace("\n","",$str); // string von Umbruechen befreien
$str = str_replace("\r","",$str); // string von Umbruechen befreien
$begleittext = explode (",", $str); // in 1dim Array packen
for($k = 0;$k < count($begleittext);$k++) // in 2dim Array packen
$phptxtarray[$i][$k] = $begleittext[$k];
}
Ich habe es auch mit strafferem Code versucht, darum geht es hier auch nicht, dieser Code funktioniert und alles, was kürzer war, hat nicht zuverlässig gearbeiet.
Später im Programm übergebe ich dieses Array an JS
<script type="text/javascript">
<!--
jstxtarray= new Array();
<?php
for($i=0;$i<count($myphp2dimarray);++$i)
{
print "jstxtarray[$i] = new Array('".implode("','", $phptxtarray[$i])."');\n";
}
?>
//-->
</script>
Auch das funktioniert soweit. Bevor ich auf diese Lösung gekommen bin, hatte ich eine andere, nämlich
<script type="text/javascript">
jstxtarray[0] = new Array("<?php print(implode('","', $phptxtarray[0])); ?>");
jstxtarray[1] = new Array("<?php print(implode('","', $phptxtarray[1])); ?>");
//-->
</script>
Mir war bis dahin nicht klar, wie man beide Inkremente hochzählen kann, daher diese Bastellösung, wo jedes Arrayelement einzeln übergeben wird.
Aber nun kommt das, was ich nicht verstehe.
In einer meiner eingelesenen Textdateien gibt es einen Namen, der ein Hochkomma enthält - O' Neal
Bei meiner Bastellösung gab es kein Problem mit O' Neal
Bei der PHP Lösung bekam ich einen Fehler, der erst dann verschwand, als ich in der TXT Datei das Hochkomma maskiert habe. In der Datei steht also nun O\\' Neal. Das funktioniert, ist aber unbefriediegend. Nun habe ich versucht, beim Einlesen der Datei das Hochkomma durch ein maskiertes Hochkomma zu ersetzen.
etwa so.
$str = str_replace("'","\\'",$str);
Und da habe ich etliche Kombinationen durchprobiert, die aber allesamt offenbar falsch sind.
Nun habe ich zwei Fragen.
1. Kann mir jemand sagen, warum es bei meiner Bastellösung ohne Maskerade funktioniert und bei der php Lösung nicht?
2. Gibt es bei der php Stringbehandlung eine Möglichkeit, das Hochkomma so zu maskieren, dass die PHP Lösung im Java Script funktioniert?
Ich möchte nach Möglichkeit nicht die Originaldatei editieren müssen.
Schöne Grüsse aus HH
Rudolf
Kommentar