CodeIgniter中清理产品URL冗余字符提取商品名称
解决CodeIgniter中从productUrl提取产品名称的问题
要从给定的productUrl中提取你想要的格式的产品名称,我们可以通过PHP字符串处理函数结合正则表达式来实现,下面是具体的步骤和修改后的代码:
处理逻辑分解
- 移除固定前缀:去掉URL开头的
https://www.websitename.com/item/部分 - 剔除末尾的ID和后缀:移除URL最后面的
/数字.html部分 - 转换连字符格式:把大部分
-替换为空格,仅保留Winter-Fleece的连字符(匹配你的目标输出需求)
修改模型代码(推荐在模型中处理数据)
我们可以在模型查询结果后,为每个产品对象添加处理好的product_name属性,这样视图可以直接调用,让视图专注于展示内容:
public function get_current_page_records($limit, $start) { $this->db->limit($limit, $start); $this->db->select("*"); $this->db->from("SjohlLBzads_products"); $this->db->join('SjohlLBzads_products_meta', 'SjohlLBzads_products_meta.post_id = SjohlLBzads_products.post_id'); $this->db->join('SjohlLBzads_ali_meta', 'SjohlLBzads_ali_meta.post_id = SjohlLBzads_products.post_id'); $query = $this->db->get(); if ($query->num_rows() > 0) { $data = []; foreach ($query->result() as $row) { // 处理productUrl生成产品名称 $raw_url = $row->productUrl; // 步骤1:移除固定前缀 $prefix = 'https://www.websitename.com/item/'; $clean_url = str_replace($prefix, '', $raw_url); // 步骤2:移除末尾的ID和.html后缀 $clean_url = preg_replace('/\/\d+\.html$/', '', $clean_url); // 步骤3:转换连字符,保留Winter-Fleece格式 $product_name = str_replace('-', ' ', $clean_url); $product_name = str_replace('Winter Fleece', 'Winter-Fleece', $product_name); // 将处理好的名称添加到行对象中 $row->product_name = $product_name; $data[] = $row; } return $data; } return false; }
修改视图代码
假设你在视图中是循环遍历产品列表,现在可以直接输出处理好的产品名称:
<?php foreach ($products as $item): ?> <?php echo $item->product_name; ?> <?php endforeach; ?>
如果是单个产品数据,直接输出即可:
<?php echo $item->product_name; ?>
扩展说明
如果后续有更多需要保留连字符的词汇(比如类似Winter-Fleece的组合),可以用数组批量替换来扩展逻辑,让代码更灵活:
// 定义需要保留连字符的词汇组合 $keep_hyphen_phrases = [ 'Winter-Fleece', // 可添加更多,比如 'Summer-Cotton'、'High-Waist' ]; // 先统一替换所有连字符为空格,再把需要保留的组合替换回去 $product_name = str_replace('-', ' ', $clean_url); foreach ($keep_hyphen_phrases as $phrase) { $product_name = str_replace(str_replace('-', ' ', $phrase), $phrase, $product_name); }
内容的提问来源于stack exchange,提问作者Reezal AQ
相关产品推荐
相关产品推荐

