如何实现符合指定规则的字符串转HTML的PHP函数?
正确实现字符串转有效HTML的函数
我看了你写的代码,发现几个小问题:比如替换__的时候额外加了空格,会破坏原文本的连贯性;还有标签没正确闭合(比如<strong>对应需要</strong>,不是重复开标签);另外用str_replace处理成对标记容易出现不匹配的情况,比如多个__会被逐个替换,导致标签结构混乱。
下面给你一个靠谱的实现方案,用正则表达式来处理成对的标记,确保替换准确:
function convertToHtml($str) { // 先处理__包裹的内容,替换为<strong>标签 $str = preg_replace('/__(.+?)__/', '<strong>$1</strong>', $str); // 再处理**包裹的内容,替换为<i>标签 $str = preg_replace('/\*\*(.+?)\*\*/', '<i>$1</i>', $str); // 最后处理_C替换为<br/> $str = str_replace('_C', '<br/>', $str); return $str; } // 测试你的示例字符串 $inputStr = "Hi my name is __Matteo__and, _C I'm **Italian**"; $outputStr = convertToHtml($inputStr); echo $outputStr;
代码解释:
- 用
preg_replace处理成对标记:__(.+?)__是一个非贪婪正则,会精准匹配__包裹的内容,$1指代匹配到的内容,这样能确保每个__都正确对应成<strong>和</strong>标签。 - 同理,
\*\*(.+?)\*\*匹配**包裹的内容,替换为<i>和</i>(注意这里*在正则里是特殊字符,需要用\转义)。 - 最后处理
_C的替换,因为它是单个独立的标记,用str_replace就足够了,而且放在最后不会干扰前面的成对标记处理。
测试上面的代码,输出结果会是:
Hi my name is <strong>Matteo</strong>and, <br/> I'm <i>Italian</i>
完全符合你要求的转换规则~
内容的提问来源于stack exchange,提问作者Matteo Bruni
相关产品推荐
相关产品推荐

