php
  • html
  • 2013-05-02 37 views 0 likes 
    0

    下面的輸出單qoute語法印刷

    href="javascript:showBed(" a114:1')' 
    

    時,我想它的形式

    href="javascript:showBed('A114:1')" 
    
    爲了得到JavaScript來的工作

    上。我看了看this site,但沒有得到它的工作,所以我放棄了。也許你可以給我一個關於如何使用corrent語法的提示?

    echo("<a href='javascript:showBed('" . $row['Bed'] ."')' target='main' class='larmlink'>link</a>"); 
    

    感謝=)

    回答

    1

    你的輸出是不是它會輸出,但它怎麼會被解釋(提示:不要看一個解析DOM樹,看看)。

    echo("<a href='javascript:showBed('" . $row['Bed'] ."')' ... 
    

    ==>

    echo("<a href=\"javascript:showBed('" . $row['Bed'] ."')\" ... 
    
    -1

    試試這個:

    echo("<a href='javascript:showBed(\"" . $row['Bed'] ."\")' target='main' class='larmlink'>link</a>"); 
    
    1

    當你想輸出變量數據爲JavaScript,它是很好的使用json_encode(),使所有特殊字符自動轉義。 htmlspecialchars()轉義任何用於HTML屬性值的值。

    echo '<a href="', 
        htmlspecialchars('javascript:showBed(' . json_encode($row['Bed']) . ')'), 
        '" target="main" class="larmlink">link</a>'; 
    

    請注意,我用PHP字符串常量單引號,使PHP沒有通過我要搜索的字符串變量來代替。你不必這樣做,但我推薦它。

    +0

    這是行不通的,你還需要引用的論據和逃生引號。 – gcochard 2013-05-02 17:11:50

    +0

    @Greg,固定。請注意,您不必爲HTML引用JavaScript值。 'json_encode()'引用JS字符串。 – Brad 2013-05-02 17:14:18

    1

    你真的應該使用HTML周圍元素屬性更標準的雙引號。因此,最好在PHP中使用單引號。我建議這樣的:

    echo('<a href="javascript:showBed(\'' . $row['Bed'] .'\')" target="main" class="larmlink">link</a>'); 
    
    +0

    這是一個偏好問題。我更喜歡HTML屬性值的雙引號,但兩者都是完全有效的。另外,你的答案不適用於所有'$ row ['Bed']'的值。看到我的答案是正確的解決方案。 – Brad 2013-05-02 17:11:39

    +0

    @Brad我當然喜歡你對json_encoding的建議,儘管我認爲普通人可能無法理解json_encode行爲在傳遞單個字符串值時如何不同。 – 2013-05-02 17:16:35

    1

    要打印雙引號字符,你可以通過做\"

    echo("<a href=\"javascript:showBed('" . $row['bed'] ."')\" target='main' class='larmlink'>link</a>"); 
    

    Live demo

    +0

    這不適用於'$ row ['bed']'的所有值。查看我的答案以獲得解決方案。 – Brad 2013-05-02 18:09:03

    0

    使用heredoc syntax逃避它往往使代碼混合報價更容易瞭解:

    echo <<<EOD 
        <a href="javascript:showBed('$row[Bed]')" target="main" class="larmlink">link</a> 
    EOD; 
    

    如其他人所述,如果您的$row['Bed']的值可能包含單引號或雙引號,則必須使用addslashes將其轉義。

    +0

    但是,這並沒有解決轉義'$ row ['Bed']'的值的問題。... – Brad 2013-05-02 17:17:06

    0

    我喜歡用sprintf(或printf,但sprintf更容易重構)的長串這樣的,所以很容易看到的模板:

    echo sprintf("<a href='javascript:showBed(\"%s\")' target='main' class='larmlink'>link</a>", $row['Bed']); 
    

    我還考慮對$row['Bed']使用addslashes如果它有引號,則爲變量。

    0

    可以使用heredoc語法,以避免逃避什麼:

    echo <<<LOD 
    <a href="javascript:showBed('{$row['Bed']}')" target="main" class="larmlink">link</a> 
    LOD; 
    

    請注意,如果你的變量包含一些報價,您必須在使用之前addslashes功能或str_replace函數。

    另一個好的實踐的研究是系統分開PHP代碼的所有HTML內容:

    <a href="javascript:showBed('<?php 
    echo $row['Bed']; 
    ?>')" target="main" class="larmlink">link</a> 
    
    +0

    您的heredoc語法不必要地複雜(不需要'{','}'和''在裏面) - 看我的答案。 – 2013-05-02 17:35:46

    相關問題