Bullet “•” in XML

Vergelijkbaar met deze vraag
Ik ben het consumeren van een XML product dat sommige illegale tekens in het. Ik betwijfel dat ik ze kan krijgen om het probleem te verhelpen, maar ik zal het proberen. In de tussentijd zou ik graag een work-around.

Het probleem is dat het bevat een kogel. Het maakt als “•” in mijn bron. Ik heb geprobeerd een paar codering conversies, maar heb niet gevonden een combinatie die werkt. (Ik ben niet gewend om zelfs maar na te denken over mijn type van codering, dus ik ben uit mijn element hier.) Dus, ik heb geprobeerd het onder en het lijkt erop dat str_replace herkent de “•”. (het maakt zo groot blok in mijn tekst editor)
U kunt zien dat de regels met commentaar, waar ik probeerde een paar verschillende dingen.

Ik probeerde str vervangen op “•” eerste, dan getweaked rond en dit is mijn laatste:

//deal with bullets in XML.
$bullet="•"; //this was copied and pasted from transliterated text.
//$data=iconv( "UTF-8", "windows-1252//TRANSLIT", $data ); //transliterate the text:
//$data=str_replace($bullet,'•',$data); //replace the bullet char
$data=str_replace($bullet,' - ',$data); //replace the bullet char
//$data=iconv( "windows-1252", "UTF-8", $data ); //return the text to utf-8 encoding.

Ideeën hoe om te strippen of vervang deze char? Als er een functie voor het pre-reinigen van de XML, dat zou geweldig zijn, en ik zou me er niet druk om te maken.

  • Weet u zeker dat er geen andere tekens in $data die ertoe kunnen leiden dat de fout? Wat als u probeert te lezen van het document met behulp van DOMDocument::loadHtml() ? deze methode is veel meer vergevingsgezind als de xml is niet geldig
  • U+2022 is een juridische karakter in XML. Maar, het is niet geldig in een naam token. Hoe wordt het gebruikt?
  • neem een kijkje bij dit zo post en deze bron, sect. 3 – ze vertellen u hoe u php gebruiken utf-8-codering standaard en hoe om te zetten tussen verschillende coderingen als je nodig hebt om dat te doen op een case-by-case basis (maar je moet echt af te vragen waarom je dat doet).
InformationsquelleAutor TecBrat | 2013-04-15

 

One Reply
  1. 8

    XML-per definitie geen illegale tekens. Als een string bevat een karakter dat geen deel uitmaakt van XML, dan is dat de string is niet XML per definitie.

    Het teken dat u bezorgd bent over een onderdeel van Unicode. XML is gebaseerd op Unicode, dit is goed nieuws. Dus laten we de naam van wat je doel:

    Zodat u nu zeggen dat het maakt als •. Omdat U+2022 wordt gecodeerd als 0xE2 0x80 0xA2 in UTF-8, dit is een meer of minder veilige aanname om te zeggen dat je een UTF-8 encoded string (dat is de standaard codering gebruikt in XML-btw), maar het bevel van de software, waardoor het te behandelen als een single-byte codering vandaar het draaien van de single-code-punt in drie verschillende personages:

    In plaats daarvan moet u het bevel van de rendering applicatie te gebruiken met de UTF-8-codering. Dat moet meteen uw probleem op te lossen. Dus de plek te vinden waar je de invoering van een verkeerde codering, u zal het waarschijnlijk niet nodig om opnieuw te coderen, gewoon goed hint van de codering.

    Als je je afvraagt welke single-byte character-coderingen hebben deze drie Unicode-Tekens op de corresponderende bytes (0xE2 0x80 0xA2), hier is een lijst. Ik heb gewezen op de meest populaire een van deze:

    • ISO-8859-15 (latijns 9)
    • OEM 858 (Meertalige latijns-I + Euro)
    • Windows-1252 (Latijns-I)
    • Windows 1254 (Turkse)
    • Windows-1256 (Arabisch)
    • Windows 1258 (Vietnam)
    • Uw tekst vet boven komt overeen met mijn document. Het zegt <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> ik heb niet geprobeerd het veranderen van het nog. Ik zou kunnen, maar ik ben bezorgd over de onbedoelde consquences. Dus ik was op zoek naar een work-around. Dit is voor het werk en de baas zegt dat het niet belangrijk genoeg, dus zal ik laten vallen, maar accepteren dit antwoord toch. Als voor uw eerste lid, zijn er genoeg resultaten op een Google-zoekopdracht voor “xml verwijder ongeldige tekens” om mij te laten geloven dat de rest van het coderen van de wereld niet eens.
    • De oplossing voor mijn probleem, totdat ik het kan bewerken, een bos van individuele bestanden, is het toevoegen van AddDefaultCharset UTF-8 in mijn .htaccess-bestand (apache) De rest van de site lijkt niet te lijden hebben gehad van deze gedwongen charset veranderen, en het bevestigd mijn gebroken kogels.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *