PHP: XML olmayan ingilizce karakterleri Yazma - kodlayan sorun

0 Cevap php

I wrote a small PHP script to edit the site news XML file. I used DOM to manipulate the XML (Loading, writing, editing).

İngilizce karakterleri yazarken gayet iyi çalışıyor, fakat İngilizce olmayan karakterler yazılır zaman dosyayı yüklemeye çalışırken, PHP bir hata atar.

Ben elle dosyasına İngilizce olmayan karakterler yazarsanız - mükemmel ince yüklü, ama PHP İngilizce olmayan karakterler yazıyor eğer utf-8 kodlama belirtilen rağmen kodlama, yanlış gider.

Herhangi bir yardım takdir edilmektedir.

Güncelle: yararlı cevapları ile, (aşağıda okuyun) çözüldü.

Hatalar:

Warning: DOMDocument::load() [domdocument.load]: Entity 'times' not defined in filepath

Warning: DOMDocument::load() [domdocument.load]: Input is not proper UTF-8, indicate encoding ! Bytes: 0x91 0x26 0x74 0x69 in filepath

Burada yükleme ve dosya (self-açıklayıcı) tasarruf sorumlu işlevleri şunlardır:

function get_tags_from_xml(){
// Load news entries from XML file for display
    $errors = Array();

    if(!$xml_file = load_news_file()){
    // Load file
        // String indicates error presence
        $errors = "file not found";
        return $errors;
    }
    $taglist = $xml_file->getElementsByTagName("text");
    return $taglist;
}
function set_news_lang(){
// Sets the news language
    global $news_lang;

    if($_POST["news-lang"]){
        $news_lang = htmlentities($_POST["news-lang"]);
    }
    elseif($_GET["news-lang"]){
        $news_lang = htmlentities($_GET["news-lang"]);
    }
    else{
        $news_lang = "he";
    }
}
function load_news_file(){
// Load XML news file for proccessing, depending on language 
    global $news_lang;

    $doc = new DOMDocument('1.0','utf-8');
    // Create new XML document
    $doc->load("news_{$news_lang}.xml");
    // Load news file by language
    $doc->formatOutput = true;
    // Nicely format the file

    return $doc;
}
function save_news_file($doc){
// Save XML news file, depending on language 
    global $news_lang;

    $doc->saveXML($doc->documentElement);
    $doc->save("news_{$news_lang}.xml");
}

İşte XML (haber eklemek) yazma için kodu:

<?php ob_start()?>
<?php include("include/xml_functions.php")?>
<?php include("../include/functions.php")?>
<?php get_lang();?>
<?php
//TODO: ADD USER AUTHENTICATION!
if(isset($_POST["news"]) && isset($_POST["news-lang"])){
    set_news_lang();

    $news = htmlentities($_POST["news"]);

    $xml_doc = load_news_file();
    $news_list = $xml_doc->getElementsByTagName("text");
    // Get all existing news from file

    $doc_root_element = $xml_doc->getElementsByTagName("news")->item(0);
    // Get the root element of the new XML document
    $new_news_entry = $xml_doc->createElement("text",$news);
    // Create the submited news entry

    $doc_root_element->appendChild($new_news_entry);
    // Append submited news entry
    $xml_doc->appendChild($doc_root_element);

    save_news_file($xml_doc);

    header("Location: /cpanel/index.php?lang={$lang}&news-lang={$news_lang}");
}
else{
    header("Location: /cpanel/index.php?lang={$lang}&news-lang={$news_lang}");
}
?>
<?php ob_end_flush()?>

Update: with the helpful answers you provided, its solved: The value submitted by form is non-English, and it contains some HTML entities, I used htmlentities() on the POST, that made the non-English string unreadable. Replaced htmlentities() with htmlspecialchars(), and it works like magic.

Sonuç: htmlentities() İngilizce olmayan dizeleri berbat edebilir.

0 Cevap