【问题标题】:writing xml data to oracle database将xml数据写入oracle数据库
【发布时间】:2014-08-28 04:12:47
【问题描述】:

我创建了一个 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 标签。

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>

【问题讨论】:

  • 请引用您正在使用的确切插入查询
  • $stid2 = oci_parse($conn, "INSERT INTO UILABELINT VALUES (seq_uilabelint_id.nextval,'".$localeid."','".$filename."','".$value[ 'ID']."',$text)");
  • 您能否分享一个未正确编码的 html 标签的示例?
  • hmmm...&amp;st; 甚至不是一个有效的 HTML 实体。不确定htmlspecialchars 是否会有所作为,但您尝试过吗?

标签: php xml oracle internationalization


【解决方案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

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多