使用PFBC构建PHP表单时,文本框HTML特殊字符未正常转换求助
解决PFBC TextBox中特殊字符未正常转换的问题
嘿,我之前碰到过一模一样的双重编码坑,你的问题根源在于字符串被两次HTML编码了,单次解码根本不够用。
先拆解下你的原字符串:livia's baby,这里的&本身就是&的HTML实体,而后面的#39;是单引号的实体——等于说单引号的实体'又被编码了一次,变成了'。所以你只调用一次htmlspecialchars_decode,只能把&转回&,得到的是livia's baby,而不是你想要的livia's baby。
给你两个直接可行的解决方案:
方案1:两次调用解码函数
先解开外层的编码,再处理内层的实体:
$razao = "livia's baby"; // 第一次解码把&转成&,第二次解码把'转成' $decodedValue = htmlspecialchars_decode(htmlspecialchars_decode($razao, ENT_NOQUOTES), ENT_QUOTES); $form->addElement(new Element\Textbox("Razão Social:", "data[RAZAO_SOCIAL]", array( "value" => $decodedValue, "required" => true )));
方案2:用html_entity_decode一次搞定
html_entity_decode比htmlspecialchars_decode支持更多类型的HTML实体,直接用它就能一次性处理双重编码的内容:
$razao = "livia's baby"; // ENT_QUOTES参数确保单引号和双引号都会被解码 $decodedValue = html_entity_decode($razao, ENT_QUOTES); $form->addElement(new Element\Textbox("Razão Social:", "data[RAZAO_SOCIAL]", array( "value" => $decodedValue, "required" => true )));
额外提醒:可以先echo $decodedValue确认一下是不是已经变成livia's baby了,确保解码没问题再传给PFBC的TextBox。如果之后还是异常,那可能要检查PFBC的TextBox内部是不是自动做了HTML转义——不过根据你的描述,大概率是解码步骤没到位的问题。
内容的提问来源于stack exchange,提问作者Bruno Luiz K.
相关产品推荐
相关产品推荐

