php如何替换字符串中的一部分?php字符串查找与替换操作

PHP中替换字符串的核心函数是str_replace()和preg_replace(),前者用于固定文本替换,效率高;后者基于正则表达式,适用于复杂模式匹配。根据需求选择:简单替换用str_replace(),复杂模式用preg_replace()。性能敏感场景优先使用str_replace(),因其无正则解析开销。实际应用包括数据清洗(如去特殊字符、防XSS)和模板渲染(如占位符替换)。对于仅替换首个匹配项,可用preg_replace()的limit参数或结合strpos()与substr_replace()实现。

php如何替换字符串中的一部分?php字符串查找与替换操作

PHP里要替换字符串的一部分,核心就是用

str_replace()

或者

preg_replace()

,前者处理固定文本,后者搞定复杂模式。如果只是简单的文本替换,

str_replace()

效率更高也更直接;但如果需要根据某种模式(比如所有数字、特定格式的日期、或者带有通配符的字符串)来查找并替换,那就得请出

preg_replace()

这个正则表达式的大杀器了。

解决方案

我个人觉得,写PHP代码这么多年,字符串操作是绕不开的坎儿。尤其是替换,看似简单,但背后门道还真不少。很多时候,我们只是想把某个词换成另一个,

str_replace()

就是为此而生。但如果遇到更灵活的需求,比如所有数字、特定格式的日期,那

preg_replace()

(也就是基于正则表达式的替换)就成了不二之选。

1.

str_replace()

:简单直接的文本替换

这是最常用、也最容易理解的函数。它的作用就是在一个字符串中,把所有出现的指定文本替换成另一个文本。

立即学习“PHP免费学习笔记(深入)”;

// 基本用法:替换单个字符串$text = "Hello, world! Hello PHP!";$newText = str_replace("Hello", "Hi", $text);echo $newText; // 输出: Hi, world! Hi PHP!// 替换多个不同的字符串$text = "Apple, Banana, Orange";$search = ["Apple", "Banana"];$replace = ["Pineapple", "Grape"];$newText = str_replace($search, $replace, $text);echo $newText; // 输出: Pineapple, Grape, Orange// 如果替换字符串少于查找字符串,多余的查找字符串会被替换为空$text = "Red, Green, Blue";$search = ["Red", "Green", "Blue"];$replace = ["Black", "White"];$newText = str_replace($search, $replace, $text);echo $newText; // 输出: Black, White,// 统计替换次数 (可选的第四个参数)$text = "one two one three one";$count = 0;$newText = str_replace("one", "four", $text, $count);echo $newText . "n"; // 输出: four two four three fourecho "替换次数: " . $count; // 输出: 替换次数: 3// 不区分大小写的替换:str_ireplace()$text = "Hello World";$newText = str_ireplace("hello", "Hi", $text);echo $newText; // 输出: Hi World
str_replace()

的优点是速度快,因为它不需要解析复杂的正则表达式。缺点嘛,就是不够灵活,只能替换固定的字符串。

2.

preg_replace()

:基于正则表达式的强大替换

当你的查找条件不是一个固定的字符串,而是一个模式(pattern)时,

preg_replace()

就派上用场了。它使用Perl兼容正则表达式(PCRE)来匹配和替换。

// 基本用法:替换所有数字$text = "My phone number is 123-456-7890 and my age is 30.";$newText = preg_replace('/d+/', '[NUMBER]', $text);echo $newText; // 输出: My phone number is [NUMBER]-[NUMBER]-[NUMBER] and my age is [NUMBER].// 替换HTML标签(简单示例,不推荐用于复杂HTML解析)$html = "

Hello world!

";$newHtml = preg_replace('/]+>/', '', $html);echo $newHtml; // 输出: Hello world!// 使用捕获组和反向引用:提取并重组$text = "Name: John Doe, Age: 30";// 匹配 "Name: (任意字符), Age: (任意数字)"$pattern = '/Name: (.*?), Age: (d+)/';// 替换为 "User (John Doe) is (30) years old."$replacement = 'User ($1) is ($2) years old.';$newText = preg_replace($pattern, $replacement, $text);echo $newText; // 输出: User (John Doe) is (30) years old.// 不区分大小写 (使用 'i' 修饰符)$text = "PHP is fun, php is great.";$newText = preg_replace('/php/i', 'Python', $text);echo $newText; // 输出: Python is fun, Python is great.// 限制替换次数 (可选的第四个参数)$text = "apple banana apple orange apple";$count = 0;$newText = preg_replace('/apple/', 'grape', $text, 2, $count); // 只替换前2个echo $newText . "n"; // 输出: grape banana grape orange appleecho "替换次数: " . $count; // 输出: 替换次数: 2
preg_replace()

的强大之处在于它的灵活性,几乎可以处理任何复杂的查找替换需求。但相应的,它的性能开销会比

str_replace()

大一些。

3.

substr_replace()

:基于位置的替换

如果你的需求是替换字符串中某个特定位置到另一个特定位置的字符,而不是基于内容查找,那么

substr_replace()

就非常合适。

$text = "The quick brown fox.";// 从第4个字符开始,替换5个字符$newText = substr_replace($text, "slow", 4, 5);echo $newText; // 输出: The slow brown fox.// 替换到字符串末尾 (长度参数为0或省略)$newText = substr_replace($text, "cat", 16); // 从第16个字符开始替换到末尾echo $newText; // 输出: The quick brown cat.// 插入字符 (长度参数为0)$newText = substr_replace($text, "very ", 4, 0);echo $newText; // 输出: The very quick brown fox.
substr_replace()

在处理固定格式的数据,或者需要对字符串进行精确插入/删除时非常有用。

说到底,这三种工具各有侧重。

str_replace

是日常小能手,

preg_replace

是解决复杂问题的专家,而

substr_replace

则专注于精确的位置操作。

PHP中如何只替换字符串的第一个匹配项?

这确实是个常见的需求,尤其是在处理日志或者解析特定格式数据时。

str_replace()

默认会替换所有匹配项,但

preg_replace()

提供了

limit

参数来控制替换次数。当然,如果你的需求更精细,或者不想引入正则表达式的开销,也可以通过组合其他字符串函数来实现。

方法一:使用

preg_replace()

limit

参数

这是最直接也最推荐的方式,因为它简洁明了。

preg_replace()

的第四个参数就是

limit

,用于限制模式匹配的次数。

$text = "apple banana apple orange apple";// 只替换第一个 'apple'$newText = preg_replace('/apple/', 'grape', $text, 1);echo $newText; // 输出: grape banana apple orange apple

这里,

1

就表示只进行一次替换。如果设置为

2

,就替换前两个,以此类推。

方法二:结合

strpos()

substr_replace()

如果你坚持不用正则表达式,或者只是替换一个固定字符串的第一个匹配项,那么可以手动找到第一个匹配的位置,然后用

substr_replace()

进行替换。

$text = "apple banana apple orange apple";$search = "apple";$replace = "grape";// 查找第一个匹配项的位置$pos = strpos($text, $search);if ($pos !== false) {    // 如果找到了,就用 substr_replace 进行替换    $newText = substr_replace($text, $replace, $pos, strlen($search));    echo $newText; // 输出: grape banana apple orange apple} else {    echo "未找到匹配项。n";    echo $text; // 输出: apple banana apple orange apple}

这种方法稍微复杂一点,需要先用

strpos()

找到子字符串的起始位置,然后用

substr_replace()

从那个位置开始替换掉原字符串长度的字符。它的好处是对于简单的固定字符串查找,可能比

preg_replace()

有轻微的性能优势,因为它不需要启动正则表达式引擎。但话说回来,对于大多数应用场景,这点性能差异可以忽略不计。

在PHP中,使用str_replace和preg_replace进行字符串替换的性能差异及选择考量是什么?

这确实是一个值得深思的问题,尤其是在处理大量数据或者高并发请求时。虽然对于小规模、低频率的操作,两者的性能差异几乎可以忽略不计,但了解它们的底层机制和性能特点,能帮助我们做出更明智的选择。

性能差异:

str_replace()

机制: 它进行的是简单的字节比较和内存复制操作。PHP内部会有一个高度优化的C语言实现,直接在内存中查找并替换字节序列。特点: 速度非常快。因为它不涉及复杂的模式解析、状态机管理、回溯等正则表达式引擎的开销。适用场景: 当你需要替换的是固定、已知的子字符串,并且不需要任何模式匹配能力时,

str_replace()

是首选,性能表现最佳。

preg_replace()

机制: 它依赖于PCRE(Perl Compatible Regular Expressions)库。每次调用都会涉及到正则表达式的编译(如果不是预编译的模式)、匹配引擎的启动、状态机的运行以及可能的“回溯”(backtracking)过程。这些都是计算密集型的操作。特点: 功能强大,但性能开销相对较大。正则表达式越复杂,匹配的字符串越长,性能下降可能越明显。不恰当的正则表达式甚至可能导致“灾难性回溯”,使得性能急剧下降。适用场景: 当你的查找条件是动态的、复杂的模式,或者需要利用捕获组进行高级操作时,

preg_replace()

是唯一选择。

选择考量:

需求复杂度:

固定文本替换? 毫无疑问,用

str_replace()

。比如替换所有

"foo"

"bar"

模式匹配? 必须用

preg_replace()

。比如替换所有数字、所有HTML标签、所有邮箱地址。

性能敏感度:

普通Web应用? 大多数情况下,对于常规的字符串操作,两者的性能差异不足以成为瓶颈。选择可读性更高、更符合逻辑的那个。大数据处理、高并发API、循环内大量操作? 在这些场景下,性能差异可能变得显著。如果能用

str_replace()

解决,就坚决不用

preg_replace()

。如果必须用

preg_replace()

,则需要优化正则表达式,避免不必要的复杂性,并考虑缓存预编译的正则表达式(虽然PHP的

preg_replace

函数内部已经做了部分优化)。

代码可读性和维护性:

str_replace()

通常更容易理解和维护,特别是对于不熟悉正则表达式的开发者。

preg_replace()

的代码可能更简洁,但正则表达式本身的可读性较差,需要额外的注释或文档来解释。

总结一下,我的经验是:能用

str_replace()

解决的问题,就别用

preg_replace()

。这不仅是性能上的考量,也是代码简洁性和可维护性上的最佳实践。只有当你的查找条件确实需要模式匹配的强大能力时,才考虑引入

preg_replace()

PHP字符串替换在数据清洗和模板渲染中有哪些实际应用场景?

字符串替换在PHP的日常开发中,特别是在数据清洗(Data Sanitization)和模板渲染(Template Rendering)这两个领域,简直是无处不在的核心操作。它们是构建健壮、安全和动态Web应用的基础。

1. 数据清洗(Data Sanitization)

数据清洗的目标是确保输入的数据是安全、有效且符合预期的。字符串替换在这里扮演着关键角色,用于去除恶意内容、格式化数据或进行编码。

去除不必要的字符: 用户输入常常会包含一些我们不希望出现在数据库或显示页面的字符,比如额外的空格、特殊符号甚至是一些控制字符。

// 去除字符串两端和中间多余的空格$input = "  Hello   World!  ";$cleanedInput = preg_replace('/s+/', ' ', trim($input));echo $cleanedInput; // 输出: Hello World!// 移除数字以外的所有字符$phone = "Call me at +1 (555) 123-4567";$digitsOnly = preg_replace('/[^0-9]/', '', $phone);echo $digitsOnly; // 输出: 15551234567

HTML标签过滤/转义: 防止XSS(跨站脚本攻击)是数据清洗的重中之重。虽然PHP有

strip_tags()

htmlspecialchars()

,但有时我们可能需要更精细的控制,比如只允许某些特定的HTML标签,或者替换掉某些属性。

// 移除所有HTML标签 (类似 strip_tags,但可以自定义更复杂的规则)$comment = "alert('XSS');Hello world!";$safeComment = preg_replace('/]*>(.*?)/is', '', $comment); // 移除script标签$safeComment = strip_tags($safeComment, ''); // 允许粗体和斜体echo $safeComment; // 输出: Hello world!// 替换特殊字符为HTML实体 (如果不用 htmlspecialchars)$text = "This has  characters.";$htmlSafe = str_replace([''], [''], $text);echo $htmlSafe; // 输出: This has  characters.

URL参数清理: 有时URL参数中可能包含不安全的字符或需要编码的部分。

$urlParam = "user name with spaces & special chars?";$encodedParam = urlencode($urlParam); // 这是更推荐的方式,但如果需要手动替换// 或者,用 str_replace 替换空格为 %20 (不推荐手动实现完整的URL编码)$manualEncoded = str_replace(' ', '%20', $urlParam);echo $manualEncoded; // 输出: user%20name%20with%20spaces%20&%20special%20chars?

2. 模板渲染(Template Rendering)

模板渲染是将动态数据填充到预定义的模板结构中的过程。字符串替换是实现简单模板引擎的核心机制。

占位符替换: 这是最常见的应用。模板中定义一些特殊的占位符(如

{{name}}

[MESSAGE]

),在渲染时用实际数据替换它们。

$template = "

Welcome, {{username}}!

Your last login was on {{last_login}}.

";$data = [ 'username' => 'Alice', 'last_login' => '2023-10-26 10:30:00'];// 简单替换占位符$output = str_replace( array_map(fn($key) => '{{' . $key . '}}', array_keys($data)), array_values($data), $template);echo $output;// 输出:

Welcome, Alice!

Your last login was on 2023-10-26 10:30:00.

动态内容生成: 根据条件或数据生成不同的内容片段。

$template = "Items: [ITEMS_LIST]";$items = ['Apple', 'Banana', 'Orange'];$itemsHtml = '';foreach ($items as $item) {    $itemsHtml .= "
  • {$item}
  • ";}$output = str_replace('[ITEMS_LIST]', "
      {$itemsHtml}
    ", $template);echo $output;// 输出: Items:
    • Apple
    • Banana
    • Orange

    URL重写或美化: 虽然通常由Web服务器(如Apache的mod_rewrite或Nginx)处理,但有时在PHP内部也需要对URL进行一些替换操作。

    $oldUrl = "/index.php?page=about&id=123";$newUrl = str_replace(['/index.php?page=', '&id='], ['/about/', '/'], $oldUrl);echo $newUrl; // 输出: /about/123

    当然,对于复杂的模板系统,通常会使用专门的模板引擎(如Twig、Blade等),它们提供了更强大的语法、缓存机制和安全性。但这些高级引擎的底层,依然离不开大量的字符串处理和替换操作。理解这些基本原理,对于我们使用和优化这些工具都是非常有帮助的。

    以上就是php如何替换字符串中的一部分?php字符串查找与替换操作的详细内容,更多请关注创想鸟其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
    发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1273148.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月10日 15:26:07
    下一篇 2025年12月10日 15:26:22

    相关推荐

    • 全球十大比特币交易平台最新排行榜

      在数字货币的浪潮中,比特币交易平台扮演着至关重要的角色,它们为全球用户提供了买卖、存储和管理比特币的渠道。随着加密货币市场的不断发展和成熟,交易平台的选择也日益多样化。一个安全、稳定、功能齐全且用户体验良好的交易平台,对于投资者而言至关重要。本文将为您揭示当前全球排名前列的十大比特币交易平台,并对其…

      2025年12月10日 好文分享
      000
    • 虚拟货币交易平台 虚拟货币十大交易所app

      在数字货币蓬勃发展的今天,选择一个安全可靠的交易平台至关重要。市面上涌现出众多虚拟货币交易所,它们在交易深度、用户体验、资产安全、创新功能等方面各有千秋。为了帮助广大投资者更好地 navigatete 虚拟货币交易的世界,本文将为您盘点业内知名的虚拟货币交易平台,并对它们进行简要介绍,助力您做出明智…

      2025年12月10日 好文分享
      000
    • 币圈十大交易软件 币圈十大交易所app下载

      本文盘点了币圈十大交易软件,分别为:1. Binance,全球领先交易所,支持多种交易模式与金融服务,界面友好且安全性高;2. OKX,产品丰富,用户体验佳,支持多语言与多重安全保护;3. gate.io,以严格审核和多样化交易服务著称,重视社区与客户服务;4. Huobi,老牌平台,运营稳健,流动…

      2025年12月10日 好文分享
      000
    • 币圈新手入门指南之如何避免情绪化交易

      情绪化交易是数字资产亏损主因,需通过五大策略控制情绪;1.识别四大陷阱:FOMO追高、损失厌恶、报复性交易、确认偏误;2.建立规则体系:预设交易条件、单笔亏损限2%、连续亏损后强制冷静24小时;3.优化仓位管理:采用恐慌测试、逆情绪加码、零成本持仓法;4.使用监测工具:记录情绪日志、参考恐惧贪婪指数…

      2025年12月10日
      000
    • eth实时行情查询APP ETH24小时实时汇率K线历史走势图分析软件

      1、首先通过官方推荐平台欧易获取可靠的ETH行情查询应用,访问指定下载地址完成安装,确保操作环境安全;2、该应用提供毫秒级实时报价、多周期K线图、历史数据回溯和自定义价格提醒等核心功能,支持深度技术分析;3、用户可通过趋势线、成交量变化及移动平均线、RSI等技术指标综合判断市场走势;4、需注意所有数…

      2025年12月10日
      000
    • 必安交易平台官方App如何下载 官网下载必安App的详细指引

      必安交易平台是一款在全球范围内广受欢迎的数字资产交易服务应用,为用户提供安全、稳定、便捷的交易体验。它支持多种主流数字资产的交易,并提供丰富的金融工具和衍生品服务。本文将为您提供必安官方app的下载链接和详细的安装指引,您只需点击本文中提供的下载链接,即可轻松获取官方正版应用。 官网App下载步骤 …

      2025年12月10日
      000
    • 2025年BCH投资时机解析 BCH币是否值得买入?

      本文旨在探讨比特币现金(BCH)在2025年的投资前景。作为主流数字资产之一,BCH因其独特的定位和技术特点而备受关注。文章将从其基本面、市场机遇、潜在挑战以及投资策略等多个维度进行分析,为关注BCH的投资者提供一个全面的参考框架,帮助评估其在未来市场中的潜在价值和风险,从而做出更为审慎的决策。 B…

      2025年12月10日
      000
    • 以太坊与狗狗币对比分析,哪个更适合投资?

      以太坊作为一个功能强大的去中心化应用平台,凭借其智能合约技术,为DeFi、NFTs等创新领域提供了坚实基础。而狗狗币则源于一个网络Meme,以其轻松的社区文化和快速的交易速度,成为一种广受欢迎的小额支付和打赏工具。对于投资者而言,理解两者在技术基础、市场定位和风险特征上的核心差异,是做出明智投资决策…

      2025年12月10日
      000
    • 怎样高效购买狗狗币DOGE更省钱?doge币今日市场行情实时查询App指南

      高效购买狗狗币(DOGE)并节省成本是许多投资者关心的问题。这不仅需要选择一个可靠且费用低廉的交易渠道,还需要掌握一定的购买策略和利用行情工具来辅助决策。通过实时行情查询应用,投资者可以随时掌握DOGE的价格动态,从而在合适的时机进行操作,以更优的价格完成建仓。本指南将为您介绍如何高效、省钱地购买狗…

      2025年12月10日
      000
    • 币圈新手入门指南之首次购买加密货币

      首次购买加密货币需构建合规认知、风险防御与操作框架:1.选择持有香港证监会牌照或与传统券商合作的合规平台,确保资产隔离与反洗钱机制;2.资金配置遵循分散原则,启动资金不超可投资资产10%,采用70%主流币+30%山寨币的杠铃策略,通过合规法币通道入金并远离场外交易陷阱;3.完成KYC认证并启用双重验…

      2025年12月10日
      000
    • 币圈新手入门之避坑指南

      币圈新手避坑需从平台选择、资金管理、骗局识别、策略构建和认知升级五方面入手:1.选择持有香港证监会牌照等合规平台并验证流动性与链上透明度;2.遵循分散配置、小额试错原则,通过合规法币通道入金,避免场外交易陷阱;3.识别资金盘的庞氏特征、社交工程的情感诱导和虚假平台的技术漏洞;4.建立动态止损机制,利…

      2025年12月10日
      000
    • 加密货币短线交易技巧有哪些?日内交易策略分享

      加密货币短线交易,特别是日内交易,是一种高风险高回报的投资方式。它要求交易者在短时间内对市场波动做出快速反应,通过频繁买卖来获取利润。这种交易模式对交易者的技术分析能力、市场敏感度以及心理素质都有着极高的要求。成功的短线交易者通常都拥有一套成熟且经过验证的交易策略和严格的风险管理纪律。 基础准备与平…

      2025年12月10日
      000
    • 如何在购买或出售之前分析比特币价格趋势,大白话解释

      分析比特币价格趋势,并不是一种能够百分百预测未来的魔法,而更像是在出海前观测天气。它通过研究历史价格数据、交易量变化以及市场参与者的情绪,来帮助我们对未来的价格可能性做出更有根据的判断。掌握一些基础的分析方法,可以让你在面对市场波动时更加从容,避免因冲动而做出买入或卖出的决定,从而在复杂的市场环境中…

      2025年12月10日
      000
    • 币圈新手入门指南之学习资源推荐

      进入加密资产领域需系统学习,1. 基础知识可学习Binance Academy免费课程、CoinDesk 101专栏及Andreessen Horowitz研报;2. 实时资讯与数据推荐The Block数据仪表盘、Messari行情周报和CryptoPanic信息聚合;3. 技术分析工具首选Tra…

      2025年12月10日
      000
    • 虚拟货币排名前十的主流币

      当前主流虚拟货币前十名为比特币、以太坊、泰达币、币安币、瑞波币、索拉纳、卡尔达诺、狗狗币、波卡和雪崩协议,它们凭借各自的技术优势和应用场景在市场中占据重要地位,其中比特币作为“数字黄金”具有开创性地位,以太坊通过智能合约推动了DeFi和NFT发展,泰达币作为稳定币提供市场流动性,币安币依托币安生态具…

      2025年12月10日 好文分享
      000
    • 随机相对强弱指标(Stochastic RSI)的技术分析

      目录 什么是基本面分析?什么是技术分析?什么是滞后指标?什么是领先指标?理解随机RSI:RSI和随机RSI的区别:StochRSI 如何运作?如何解读 Stochastic RSI 指标?如何计算随机RSI?结语 随机相对强弱指标(stochastic rsi)是一种用于评估特定时间段内资产强弱状态…

      2025年12月10日 好文分享
      000
    • 币圈爆仓是什么?强制平仓原因、公式与避险方法一次看懂! 新手必读

      目录 前言什么是爆仓?为什么会爆仓?1. 杠杆过高,风险加剧2. 保证金不足,无法支撑波动3. 市场波动剧烈,短时间内价格崩跌4. 无设置止损,交易风险无法控制如何避免爆仓?最实用的5种策略1. 降低杠杆,减少风险2. 设置止损,提前止损出场3. 监控保证金比率,适时补仓4. 避免满仓操作,留存流动…

      2025年12月10日 好文分享
      000
    • Ethena财库策略:稳定币第三帝国的崛起

      目录 双币系统大逃杀真实采用仍未发生结语 2023 年 8 月,makerdao 生态借贷协议 spark 给出 $dai 8% 的年化收益,随后孙割分批进入,累计投入 23 万枚 $steth,最高占 spark 存款量 15% 以上,逼得 makerdao 紧急提案,把利率下调到 5%。 Mak…

      2025年12月10日
      000
    • 波场币实时行情走势图app TRX最新汇率美元24小时k线

      波场币(TRX)是波场(TRON)协议的官方代币,作为一个去中心化的区块链平台,波场致力于为去中心化互联网构建基础设施。TRX旨在推动一个全球性的去中心化娱乐内容共享系统,让创作者可以直接向消费者发布、存储和拥有内容,从而打破传统中心化平台的垄断。 波场币当前实时价格:根据最新数据,trx币价格为每…

      2025年12月10日
      000
    • 正规的虚拟货币交易平台排行榜前十

      在数字资产交易的广阔领域中,选择一个可靠且功能强大的交易平台至关重要。随着虚拟货币市场的不断发展,涌现出众多交易平台,它们在提供流动性、安全性、用户体验和多样化交易对方面展开竞争。本文旨在为您介绍排名前列的虚拟货币交易平台,它们凭借其卓越的服务和市场影响力,在行业内建立了良好的声誉。我们将深入了解这…

      2025年12月10日 好文分享
      000

    发表回复

    登录后才能评论
    关注微信