如何在PHP代码中插入href链接?实操失败寻求解决方案
搞定PHP翻译函数里插入HTML链接无效的问题
嘿,我来帮你解决这个问题!你遇到的核心问题是在WordPress的__()翻译函数里插入HTML链接时,出现了引号语法冲突,导致代码无法正确执行,链接自然也就显示不出来了。
为啥你的尝试会失败?
你写的代码里,__()的参数用双引号包裹,而<a>标签里的target="_blank"也用了双引号——PHP会把中间的"target="当成字符串的结束标记,直接报语法错误,这是最直接的原因。另外,原代码里的<br/>是HTML转义字符,其实如果要输出正常的换行,直接写<br>或者<br/>就行(只要输出时没有被强制转义)。
几种正确的写法
方法1:转义内部的双引号
把<a>标签里的双引号用反斜杠\转义,这样PHP就不会把它当成字符串的结束符了:
echo '<br/>'.__("Your auction isn't live yet, the admin needs to approve it.<br/>For more info <a target=\"_blank\" href=\"www.website.com\">CLICK HERE</a>.", "AuctionTheme");
方法2:换用单引号包裹翻译字符串
如果你的翻译文本里没有太多单引号冲突(这里只有isn't,可以写成isn\'t),直接用单引号包裹整个翻译文本,内部的双引号就不用转义了:
echo '<br/>'.__('Your auction isn\'t live yet, the admin needs to approve it.<br/>For more info <a target="_blank" href="www.website.com">CLICK HERE</a>.', "AuctionTheme");
方法3:分离文本和HTML(更规范的多语言写法)
如果要做专业的多语言适配,建议把可翻译的文本和HTML标签分开,避免翻译人员不小心破坏标签结构:
// 先定义带占位符的翻译文本 $message = __("Your auction isn't live yet, the admin needs to approve it.<br/>For more info %s.", "AuctionTheme"); // 单独定义链接HTML $info_link = '<a target="_blank" href="www.website.com">CLICK HERE</a>'; // 用sprintf把链接插入到文本中 echo '<br/>'.sprintf($message, $info_link);
这种方式的好处是,翻译人员只需要处理纯文本,不用碰HTML标签,既安全又符合国际化规范。
额外提醒
- 记得给
href里的URL加上http://或者https://,不然浏览器会把它当成当前网站的相对路径,跳转到错误的地址。 - 如果你的主题或插件有自动转义HTML的机制,可能需要用
wp_kses_post()函数来允许<a>标签的输出,比如:
echo '<br/>'.wp_kses_post(__("Your auction isn't live yet, the admin needs to approve it.<br/>For more info <a target=\"_blank\" href=\"www.website.com\">CLICK HERE</a>.", "AuctionTheme"));
内容的提问来源于stack exchange,提问作者koy
相关产品推荐
相关产品推荐

