提前感谢您抽出宝贵时间解决我的问题。
我正在使用PHP脚本来查询mySQL数据库。不幸的是,产品描述,成分和附加信息(最后的段落)都与名称一起存储在一个字段中(名称是多余的,可以忽略)。所有文本都包含在HTML代码中。我不想保留或存储任何HTML代码,但它可能有用作分隔符。
重要提示: HTML是以编码方式存储的,所以
<p>
存储为
<p>
以下是存储在mySQL数据库中的HTML代码示例(这是它存储的确切方式。正如我之前提到的,HTML已经过编码。):
<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>
以下是与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(可能在描述后添加两个换行符以分隔附加信息),并将成分保存为$ productIngredients。我不想要包含文字“Description:”或“Ingredients:”......只是紧接着之后的信息。 如上所述,我只对原始文本感兴趣 - 我不想保存任何HTML代码。将信息存储到2个变量中时,应忽略所有HTML代码。
任何帮助都很受欢迎!
谢谢,
-Jeff
修改
正在发生的事情是mySQL数据库已连接到opencart网站。在网站的管理员方面,没有单独的成分,描述等字段。其他一切(重量,尺寸,SKU,型号等)。这是因为opencart网站并非专门用于食品。它可以用于电子设备,在这种情况下不需要这样的领域。商店所有者(不是我)将所有这些信息提供给描述入口点。 HTML可能会放弃这一点。该网站由另一个人管理(如果需要,我可以直接与他联系)。我宁愿不让他或我自己更改opencart代码来添加额外的字段,除非它可以很容易地完成。
在opencart网站上添加其他字段会很容易吗?这样,描述字段可以是排他性的。谢谢你的回复。
答案 0 :(得分:1)
这个问题很简单。我认为做这个设计的人是一个错误。他只是在数据库字段中存储了一段授权HTML。现在,您正试图从中提取特定信息。
显然,您在检索其中一件商品时所做的第一件事就是取消授权(将<
转为<
等)。 html_entity_decode就是这么做的。
现在看起来你的html格式正确。也就是说,<p>
和</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内容包装在单个<article> ... </article>
节中,就像这样。最后一项,关于面包重量的段落,可能会被拒绝作为额外的。
$xml= simplexml_load_string("<?xml version='1.0'?>\n<article>\n" .
html_entity_decode($mydata) . "\n</article>\n";
处理XML需要一些愚弄,至少对我而言。