如何用html标签base64_encode和base64_decode字符串?

时间:2015-09-01 09:45:22

标签: php html wordpress base64

我的base64解码有问题 例如,我有这段代码:

else if($_POST['submit']==2){
        $send = base64_encode($text_success);
        wp_redirect( home_url('/sales-funnel/add-product?msg='.$send) ); exit;
    }

我将编码的字符串发送到页面,这样用户就无法从网址中读取它。 $ text_success包含html代码,如果$wpdb->query不包含错误,则生成该代码:

 `Darījums veiksmīgi pievienots!</br>Komentārs veiksmīgi pievienots!</br>Klients veiksmīgi pievienots!</br>Fāze ir pievienota! </br>`

在所有在线base64_decode中,它的效果很好,但是当我尝试这样做时,我的WordPress网站会返回空字符串:

if (isset($_GET['msg']) && !empty($_GET['msg'])){
    $text = base64_decode($_GET['msg']);
    echo $text;
}

但是,$_GET['msg'] = RGFyxKtqdW1zIHZlaWtzbcSrZ2kgcGlldmllbm90cyE8L2JyPktvbWVudMSBcnMgdmVpa3NtxKtnaSBwaWV2aWVub3RzITwvYnI+S2xpZW50cyB2ZWlrc23Eq2dpIHBpZXZpZW5vdHMhPC9icj5GxIF6ZSBpciBwaWV2aWVub3RhISA8L2JyPg==

P.S。我试着在没有html标签的情况下使用它,一切都很棒。

1 个答案:

答案 0 :(得分:2)

问题与base64字母表不是URL安全的事实有关。在这种特殊情况下,base64编码的字符串包含+,它被解释为空格。

要解决此问题,您可以:

  • 使用base64字母表的网址安全版本,即将+替换为-/替换为_,并修剪尾随= paddding ,如RFC4648中所述。 This answer包含此方法的代码示例。
  • 对base64编码后的内容进行网址编码,将+转换为%2B,将/转换为%2F,将=转换为%3D

这可以解决您的问题,但不言而喻,在不受信任的环境中,让用户能够将原始HTML注入您的网站会构成严重的安全风险。