запись xml-данных в базу данных oracle
Я создал php-скрипт для чтения данных из xml и записи их в базу данных oracle . xml-данные имеют html-теги. которые написаны на разных языках, таких как английский, русский, итальянский, немецкий.
В 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);
}
}
Запрос на вставку является ВСТАВИТЬ В ЗНАЧЕНИЯ интернационализации (seq_id.nextval,$text)
$stid2 = oci_parse(
$conn,
"INSERT INTO UILABELINT VALUES (seq_uilabelint_id.nextval,'".$localeid."','".$filename."','".$value['ID']."',$text)"
);
Моя настоящая проблема заключается в том, что иногда данные вставляются правильно, а иногда теги html неправильно кодируются.
Может ли любое тело предложи мне
- погода я должен использовать htmlentities() или нет.
- Что я должен сделать, чтобы отобразить эти 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>
1 answers
В современной разработке программного обеспечения следует использовать параметризованные запросы. Это делается для того, чтобы избежать взлома инъекций и ошибок из-за специальных символов.
Заменить строку:
$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