2014-08-28 4 views
3

Я создал скрипт php для чтения данных из xml и записи его в базу данных оракула XML-данные имеют html-теги. которые находятся на разных языках, таких как английский, русский, итальянский, немецкий.Запись данных xml в базу данных oracle

В PHP я читаю данные из XML в

$xml=simplexml_load_file($file); 
foreach($xml as $value) 
{ 
     $text=''; 
    if($value->englishtext=='') 
    { 
     $text=htmlentities(str_replace("'", "'", $value->translatedtext), ENT_HTML5); 
    } 
    else 
    { 
     $text=htmlentities(str_replace("'", "'", $value->englishtext), ENT_HTML5); 
    } 
} 

запроса вставной INSERT INTO Интернационализация ЗНАЧЕНИЯ (seq_id.nextval, $ текст)

$stid2 = oci_parse(
    $conn, 
    "INSERT INTO UILABELINT VALUES (seq_uilabelint_id.nextval,'".$localeid."','".$filename."','".$value['ID']."',$t‌​ext)" 
); 

Моя реальная проблема заключается в несколько раз данные вставляются правильно, а несколько раз теги html неправильно кодируются.

Может ли тело предложить мне

  1. погоды я должен использовать htmlentities() или нет.
  2. Что я должен сделать, чтобы отобразить эти теги html в html5.

Пример XML-данных

<?xml version="1.0" encoding="UTF-8"?> 
<Resources> 
<Section ID="AddListing"> 
     <englishtext><![CDATA[Add Listing]]></englishtext> 
     <translatedtext/> 
</Section> 
<Section ID="DirectPayment"> 
    <englishtext><![CDATA[Receive <b>direct payments</b> from travelers.]]</englishtext> 
    <translatedtext/> 
</Section> 
</Resources> 
+0

просьба указать точно вставить запрос u're используя – jondinham

+0

$ stid2 = oci_parse ($ Конн, «INSERT INTO UILABELINT VALUES (seq_uilabelint_id .nextval, '$ LocaleID.. "', ' "$ имя_файла.."', '» $ значение. [ 'ID']. "», $ текст)"); –

+0

Можете ли вы поделиться примером того, как выглядят HTML-теги, которые неправильно кодируются? –

ответ

1

Вы должны использовать параметризованные запросы в разработке программного обеспечения современных дней. Это делается для того, чтобы избежать взлома инъекций и ошибок из-за специальных символов.

Заменить строку:

$stid2 = oci_parse(...); 

со следующим кодом подготовки заявление:

$stid2 = oci_parse(
    $conn, 
    "INSERT INTO UILABELINT VALUES (". 
     "seq_uilabelint_id.nextval,':localeId',':fileName',':valueId',':text'". 
    ")" 
); 

oci_bind_by_name($stid2, ":localeId", $localeid); 
oci_bind_by_name($stid2, ":fileName", $filename); 
oci_bind_by_name($stid2, ":valueId", $value["ID"]); 
oci_bind_by_name($stid2, ":text",  $text); 

и, наконец, выполнить заявление, вам не нужно использовать 'str_replace' или '' htmlentities больше , Просто получить текст непосредственно:

$text = $value->translatedtext; 

Подробнее о OCI параметрирования, см: http://php.net/manual/en/function.oci-bind-by-name.php

Смежные вопросы