2

時間を割いて私の問題を解決していただき、ありがとうございます。

PHPスクリプトを使用してmySQLデータベースにクエリを実行しています。残念ながら、製品の説明、成分、および追加情報(最後の段落)はすべて、名前とともに1つのフィールドに保存されます(名前は冗長であり、無視できます)。すべてのテキストはHTMLコードで囲まれています。HTMLコードを保持または保存したくないのですが、区切り文字として役立つ場合があります。

重要: HTMLはエンコードされて保存されるため、

<p> 

として保存されます

&lt;p&gt;

これは、mySQLデータベースに保存されているHTMLコードの例です(これは、保存されている正確な方法です。前述したように、HTMLはエンコードされています)。

&lt;table border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;2&quot;&gt;
&lt;tbody&gt;
    &lt;tr valign=&quot;top&quot;&gt;
        &lt;td&gt;
            Item:&lt;/td&gt;
        &lt;td&gt;
            Olive Loaf - Baked - &lt;b&gt;Gluten Free!&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr valign=&quot;top&quot;&gt;
        &lt;td&gt;
            Description:&lt;/td&gt;
        &lt;td&gt;
            A blend of beef and pork along with our unique spices to create a base mix. To this mix we add plenty of olives and form it into a loaf, we then smoke this over natural hardwoods for a unique Koegel flavor.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr valign=&quot;top&quot;&gt;
        &lt;td&gt;
            Ingredients:&lt;/td&gt;
        &lt;td&gt;
            Beef and Pork, Water, Spanish Olives (Olives, Pimentos, Sodium Alginate, Guar Gum, Calcium Chloride, Water, Salt, Lactic Acid), Nonfat Dry Milk, Corn Syrup, Salt, Red Sweet Peppers (bell peppers, water, citric acid.), Spices, Dextrose, Dehydrated Onions.&lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
    &lt;strong&gt;Each loaf weighs approximately 6 lbs.&lt;/strong&gt;&lt;/p&gt;

これは、HTMLがデコードされた同じコードスニペットです(これは、mySQLデータベースに格納される方法ではありません。これは視覚的な目的で提供しました)。

<table border="0" cellpadding="2" cellspacing="2">
<tbody>
    <tr valign="top">
        <td>
            Item:</td>
        <td>
            Olive Loaf - Baked - <b>Gluten Free!</b></td>
    </tr>
    <tr valign="top">
        <td>
            Description:</td>
        <td>
            A blend of beef and pork along with our unique spices to create a base mix. To this mix we add plenty of olives and form it into a loaf, we then smoke this over natural hardwoods for a unique Koegel flavor.</td>
    </tr>
    <tr valign="top">
        <td>
            Ingredients:</td>
        <td>
            Beef and Pork, Water, Spanish Olives (Olives, Pimentos, Sodium Alginate, Guar Gum, Calcium Chloride, Water, Salt, Lactic Acid), Nonfat Dry Milk, Corn Syrup, Salt, Red Sweet Peppers (bell peppers, water, citric acid.), Spices, Dextrose, Dehydrated Onions.</td>
    </tr>
</tbody>
</table>
<p>
    <strong>Each loaf weighs approximately 6 lbs.</strong></p>

基本的に、名前を無視し、説明と追加情報(説明の下の最後の段落)を$ productDescription(おそらく、追加情報を区切るために説明の後に2つの改行文字を追加)として保存し、材料を$productIngredientsとして保存します。「説明:」または「成分:」というテキストを含めたくありませ...直後の情報だけです。上で述べたように、私は生のテキストにのみ興味があります-私はHTMLコードを保存したくありません。情報を2つの変数に格納するときは、すべてのHTMLコードを無視する必要があります。

どんな助けでも大歓迎です!

ありがとうございました、

-ジェフ

編集

何が起こっているのかというと、mySQLデータベースはopencartWebサイトに接続されています。ウェブサイトの管理者側には、材料、説明などの個別のフィールドはありません。その他すべて(重量、寸法、SKU、モデルなど)があります。これは、opencartのWebサイトが食品専用ではないためです。エレクトロニクスに使用できますが、その場合はそのような分野は必要ありません。ストアの所有者(私ではない)は、このすべての情報を説明のエントリポイントに入力します。HTMLはこれを与えるかもしれません。ウェブサイトは別の個人によって管理されています(必要に応じて私は彼に直接連絡します)。簡単に実行できない限り、彼も私もopencartコードを変更してフィールドを追加しないようにしたいと思います。

opencart Webサイトにフィールドを追加するのは簡単でしょうか?そうすれば、説明フィールドを排他的にすることができます。返信ありがとうございます。

4

1 に答える 1

1

この問題は簡単です。このデザインをした人を非難するのは間違いだと思います。彼は単純に、エンティティ化された HTML のスニペットをデータベース フィールドに保存しました。ここで、そこから特定の情報を抽出しようとしています。

明らかに、これらのアイテムのいずれかを取得したときに最初に行うことは、それを非エンティティ化することです ( etc に&lt;変換し<ます)。html_entity_decode がそれを行います。

これで、HTML の形式が整ったように見えます。つまり、<p>and</p>要素などは正しく一致します。XML ライブラリを使用して操作できるので、これは良いことです。

これは、私のプロジェクトのサンプル コードです。あなたのプロジェクトでデバッグしようとはしていません。

 $xml= simplexml_load_string("<?xml version='1.0'?>\n" . html_entity_decode($mydata);
 $ns = $xml->getNamespaces(true);
 foreach ($ns as $key => $val) {
    $xml->registerXPathNamespace($key, $val);
 }
 unset($ns);

これで、小さな記事を含む simpleXML オブジェクトができました。さまざまな API を使用して、必要なデータを抽出できます。いくつかの例については、こちらをご覧ください。

http://php.net/manual/en/simplexml.examples-basic.php

あなたはこの素材をかなり簡単に扱うことができると思います。

コメントの中で、これらの HTML スタンザから興味深い情報を抽出し、専用の列に入れるように努めるべきだと言っている人がいることに注意してください。特に、このデータを検索したり、その場で更新したりする必要がある場合は、そうかもしれません。

しかし、XML/HTML に保存することも問題ありません。検索する必要がある場合は、FULLTEXT 検索を使用できます。

編集

このように、XML を 1 つの<article> ... </article>スタンザにラップする必要がある場合があります。最後の項目である、パンの重さに関する段落が余分なものとして拒否されている可能性があります。

 $xml= simplexml_load_string("<?xml version='1.0'?>\n<article>\n" .
    html_entity_decode($mydata) . "\n</article>\n";
 

少なくとも私にとっては、XML の処理には少しコツが必要です。

于 2013-01-01T19:20:06.637 に答える