将xml数据写入oracle数据库

时间:2014-08-28 04:12:48

标签: php xml oracle internationalization

我创建了一个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']."',$t‌​ext)"
);

我真正的问题是有时数据插入正确,有时html标签没有正确编码。

任何人都可以建议我

  1. 天气我应该使用htmlentities()或不使用。
  2. 我应该怎么做才能在html5中显示这些html标签。
  3. 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 个答案:

答案 0 :(得分:1)

您应该在现代使用参数化查询&#39;软件开发。这是为了避免由于特殊字符导致的黑客攻击和错误。

替换行:

$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);

并最终执行该声明,您不需要使用&#39; str_replace&#39;或者&#39; htmlentities&#39;了。直接获取文本:

$text = $value->translatedtext;

有关OCI参数化的更多信息,请参阅:http://php.net/manual/en/function.oci-bind-by-name.php