2010-07-27 31 views

Trả lời

41

Hãy thử điều này:

<?php $htmlString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     // notice the quotes around the ?php tag   
     var htmlString="<?php echo $htmlString; ?>"; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

Khi bạn gặp vấn đề như thế này, một ý tưởng tốt là để kiểm tra trình duyệt của bạn cho các lỗi JavaScript. Các trình duyệt khác nhau có các cách hiển thị khác nhau, nhưng hãy tìm một bảng điều khiển javascript hoặc một cái gì đó tương tự. Ngoài ra, hãy kiểm tra nguồn của trang của bạn khi trình duyệt xem.

Đôi khi người mới bắt đầu nhầm lẫn về các dấu ngoặc kép trong chuỗi: Trong phần PHP, bạn đã gán 'testing' đến $htmlString. Điều này đặt một giá trị chuỗi bên trong biến đó, nhưng giá trị không có dấu ngoặc kép trong nó: Chúng chỉ dành cho trình thông dịch, vì vậy anh ta biết: oh, bây giờ có một chuỗi ký tự.

+1

@ inf3rno, nếu sai, Chúng ta nên sửa chữa nó! Không thể để cho một câu trả lời sai ở đây ... những gì chính xác là sai? (Tôi giả sử bạn đang phản đối đoạn cuối ... hm ... kinda khó để giải thích điều này cho người mới bắt đầu - –

+0

@ inf3rno, oh ... Tôi vừa thấy câu trả lời của riêng bạn ... Hm ... bạn có một điểm ... ngoại trừ, tôi nghĩ rằng đối với cấp OP là ATM, có một chút TMI dường như không có đầu quấn quanh một số thứ cơ bản, –

+3

Thật dễ dàng để giải thích, nếu bạn muốn tiêm chuỗi mã javascript, bạn phải thoát khỏi nó cho javascript ... json_encode làm điều đó ... rất giống với phòng ngừa tiêm sql, bởi bạn có o thoát cho sql ... – inf3rno

23

Bạn đang thiếu dấu ngoặc kép quanh chuỗi của bạn:

... 
var htmlString="<?php echo $htmlString; ?>"; 
... 
+1

'$ htmlString =" \ "" 'huh, tôi tự hỏi tại sao JavaScript đột ngột ngừng hoạt động ... – zzzzBov

5

bạn cần dấu ngoặc kép quanh chuỗi trong javascript

var htmlString="<?php echo $htmlString; ?>"; 
+1

Bị đánh một phút:] – Anraiki

10

Tất cả các giải thích ở trên không hoạt động nếu bạn làm việc với tệp .js. Nếu bạn muốn phân tích cú pháp PHP vào file .js, bạn phải thực hiện thay đổi trên máy chủ của bạn bằng cách modfiying các .htaccess trong đó các tập tin .js cư trú bằng cách sử dụng lệnh sau:

<FilesMatch "\.(js)$"> 
    AddHandler application/x-httpd-php .js 
</FilesMatch> 

Sau đó, một test.js tập tin file chứa mã sau sẽ thực hiện JS về phía khách hàng với PHP phân tích cú pháp trên server-side:

<html> 
<head> 
<script> 
function myFunction(){ 
    alert("Hello World!"); 
} 
</script> 
</head> 
<body> 
<button onclick="myFunction()"><?php echo "My button";?></button> 
</body> 
</html> 
7

cách đúng đắn duy nhất để đưa dữ liệu phía máy chủ vào tạo mã javascript:

<?php $jsString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript">  
     var jsStringFromPhp=<?php echo json_encode($jsString); ?>; 
     alert(jsStringFromPhp); 
    </script> 
    </body> 
</html> 

Với trích dẫn đơn giản, nội dung của biến của bạn không được thoát khỏi HTML và javascript, do đó, nó dễ bị tấn công bởi XSS ...

Vì lý do tương tự tôi khuyên bạn nên sử dụng document.createTextNode() thay vì đặt innerHTML. Ofc. nó chậm hơn, nhưng an toàn hơn ...

+2

Về mặt kỹ thuật, nó không phải là cách * duy nhất *, nhưng nó chắc chắn là một cách an toàn.Điều đó nói rằng, không nên xây dựng JavaScript với PHP để bắt đầu. – zzzzBov

+0

Tùy thuộc vào loại dữ liệu bạn muốn gửi. Các ký tự unicode html không giống như các ký tự unicode javascript, do đó bạn phải chuyển đổi chúng ... Một cách khác để sử dụng các dịch vụ REST và một thư viện phía máy khách thích hợp để xử lý các yêu cầu, ví dụ extjs hoặc backbone. Btw. bạn cũng phải sử dụng json_encode trong trường hợp đó ... – inf3rno

Các vấn đề liên quan