Citește caracter specific de fișier XML într-un fișier php

voturi
0

Am o problemă atunci când am citit anumite caractere din fișierul meu XML la fișierul PHP.

Eu folosesc caractere ca „Ä“, „ü“ și „ö“. I a lua următoarea eroare:

simplexml_load_string () [function.simplexml-încărcare-string]: Entitate: Linia 96: eroare parser: intrare nu este adecvată UTF-8, indică codificare! Bytes: 0xFC 0x73 0x65 0x0C

Întrebat 19/09/2013 la 13:45
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Șirul de XML ai nu este codificat în mod corespunzător. Codarea implicită este UTF-8însă șirul ai este diferit, cel mai probabil Windows-1252.

Dacă doriți ca eroarea să plece, va trebui să re-codifice șirul de la care (prin informațiile lipsă în întrebarea dvs. :) codare necunoscute la UTF-8.

Ca o codificare în cazul în care se cunoaște este rupt, aveți nevoie pentru a afla / afla mai multe despre codificarea șirului întâi.

Apoi , puteți pur și simplu converti la UTF-8 sau injecta codificarea în șirul XML , care este ușor posibil XMLRecoder- Verificați și modificați codificarea caracterelor a unui document XML bazat pe XML Declarația și BOM . Părți din ea sunt explicate în PHP XMLReader, obține versiunea și codificarea care este de aproximativ XMLReader dar , ca SimpleXML, este , de asemenea , o extensie PHP XML bazate pe libxml și împărtășește unele dintre bunurile comune, astfel încât aceasta funcționează.

Exemplu de utilizare:

$buffer = file_get_contents($file);

$fromEncoding = 'WINDOWS-1252';  # insert *your* correct string encoding here

$recoder = new XMLRecoder();
$buffer  = $recoder->setEncodingDeclaration($buffer, $fromEncoding);

$sxml = simplexml_load_string($buffer);

Pentru a înțelege mai bine codificări XML în PHP și codificările charset disponibile și numele, vă rugăm să consultați:

Publicat 19/09/2013 la 14:56
sursa de către utilizator

voturi
0

PHP 5 și versiunile anterioare nu au nici un suport Unicode nativ. PHP 6 sau 7, în cazul în care a fost promis suportul Unicode, poate dura ani de zile. Pentru a elimina decalajul, există mai multe extensii, cum ar fi mbstring, iconv și intl.

Asigurați-vă că trimiteți răspunsul HTML cu un conținut de tip corespunzător și codificare, de exemplu,

<?php header('Content-Type: text/html; charset=utf-8');?>

De asemenea, verificați că prolog fișierul XML conține codificarea corectă, de ex

<?xml version="1.0" encoding="UTF-8"?>

Presupunând că este tot corect, se pare că fișierul XML pretinde a fi UTF-8 , dar este de fapt altceva (probabil Latin1 sau ISO-8859-1 sau mojibake .). Puteți deschide manual fișierul XML în editorul preferat (imi place Sublime ) și salvați fișierul în mod explicit cu o codificare UTF8. Sau puteți utiliza o funcție pentru a încerca să modifice șirul înainte de încărcare. La fel ca cel de la: Eroare: „Intrarea nu este corectă UTF-8, indică codificare!“ folosind simplexml_load_string PHP

function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str)
{
    return preg_replace_callback('#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#', 'utf8_encode_callback', $str);
}

function utf8_encode_callback($m)
{
    return utf8_encode($m[0]);
}

Dar, la sfârșitul zilei, va fi murdar și PHP încă nu pare să se ocupe de Unicode precum și am dori toți să și pur și simplu nu este construit în miez.

Vă sugerăm să verificați portabil UTF-8 - o bibliotecă ușor pentru Unicode Manipularea în PHP .

Publicat 19/09/2013 la 14:10
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more