Kann jemand diese seltsame Situation in PHP erklären? Hier ist ein Beispiel.DOM XML String ersetzen Bug
Ich habe Zeichenfolge: "Olbrachtova 10". Ich möchte Komma vor Nummer hinzufügen und Leerzeichen vor Komma entfernen. Also wird das Ergebnis sein.
"Olbrachtova, 10"
Diese Zeichenfolge muss in XML geschrieben werden, und ich bin mit DOMDocument Bibliothek.
Ich verwende diesen Code:
Funktion Position der ersten Reihe zu finden (funktioniert gut):
private function findOffset($text){
preg_match('/^\D*(?=\d)/', $text, $m);
return isset($m[0]) ? strlen($m[0]) : false;
}
Funtion Zeichen in Zeichenfolge einzufügen (funktioniert gut auch)
private function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
Und hier ist das endgültige Skript
Nach dieser Verarbeitung versuche ich letzte Zeichenfolge anfügen, die "Olbrachtova, 10" zu XML ist.
var_dump($address);
//return
string(15) "Olbrachtova, 10"
Und hier ist letzte Zeile
$parcel->appendChild($xml->createElement("Indirizzo", $address));
Ausgang dieses wird anhängen:
<Indirizzo>Olbrachtova</Indirizzo>
Es ist immer vor dem Komma brechen, in dem Ort, wo ich Raum mit
entfernt$address[$numberPosition - 1] = '';
WARUM?
Aber wenn ich das bin mit Platz
$address = substr_replace($address,'',$numberPosition - 1,1);
funktioniert super Alles zu entfernen. Kann jemand erklären, warum die erste Methode nicht funktioniert hat?
EDIT
Hier vollständige Code
<?php
function findOffset($text){
preg_match('/^\D*(?=\d)/', $text, $m);
return isset($m[0]) ? strlen($m[0]) : false;
}
function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
$xml = $dom = new DOMDocument('1.0', 'UTF-8');
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
//main element for soap request
$mainSection = $xml->createElement("Info");
$parcel = $xml->createElement("Parcel");
//string to change
$address = "Olbrachtova 10";
//position of first number
$numberPosition = findOffset($address);
if ($numberPosition){
//remove space before number if exists
if($address[$numberPosition - 1] == ' '){
//remove space - HERE IS PROBLEM
$address[$numberPosition - 1] = '';
//find new position of number
$numberPosition = findOffset($address);
}
//add comma before number
$address = stringInsert($address,", ",$numberPosition);
}else{
//if string has no number return false - is invalid
return false;
}
$parcel->appendChild($xml->createElement("Indirizzo", $address));
var_dump($address);
//append Package
$mainSection->appendChild($parcel);
//append whole xml to main
$xml->appendChild($mainSection);
$output = $xml->saveXML();
print_r($output);
?>
Und Sie können es hier testen: http://phptester.net/
Bitte fügen Sie den vollständigen Quellcode von PHP-Skript nicht
$string[$index] = "";
unter keinen Umständen schreiben:Lösung. Sie können auch 'var_dump()' verwenden, um die Variablenwerte während der Ausführung Ihres PHP-Skripts auszugeben, um zu sehen, wie die Werte geändert werden. – Progman
Beitrag bearbeitet, Sie können es versuchen .. Ich denke, dass es Fehler in DOMDocument-Bibliothek ist – 3y3skill3r