2010-01-05 36 views
18

Trong dự án php của tôi, tôi có một giá trị tương ứng với các bộ phận đặc biệt như "," vv ("5" inch, '3,5' inch, vv). Nhưng nó không xuất hiện trong trường văn bản. này là nó có thể hiển thị giá trị này trong một hộp văn bản có ai giúp tôi ...Trường nhập có chứa dấu nháy kép giá trị

Trả lời

72

Sử dụng htmlentities:?

<input value="<?php echo htmlentities($value);?>"> 
+3

Nếu bạn muốn lưu các giá trị này không được mã hóa trong cơ sở dữ liệu thì sao? Bạn phải áp dụng mỗi lần 'html_entity_decode();' trước khi thực hiện SQL INSERT? Điều đó nghe không tốt lắm – dynamic

+4

yes123, không, bạn không biết. Mã hóa này sẽ đảm bảo các giá trị là chính xác trong tài liệu HTML. Trình duyệt web sẽ tự động gửi nó theo đúng định dạng bình thường. –

+0

Bạn đã đúng! Tôi đã bỏ lỡ rằng – dynamic

10

tôi cho rằng "text box" của bạn là một phần tử HTML <input>

Nếu có, bạn sẽ hiển thị nó bằng cách sử dụng một cái gì đó như này:

echo '<input name="..." value="' . $yourValue . '" />'; 

Nếu đó là trường hợp, bạn cần phải thoát khỏi HTML mà chứa trong biến của bạn, với htmlspecialchars:

echo '<input name="..." value="' . htmlspecialchars($yourValue) . '" />'; 

Lưu ý rằng bạn có thể có thêm một vài thông số, đặc biệt là chỉ định mã hóa bạn đang sử dụng.


Bằng cách này, xem xét $yourValue đã được khởi tạo như thế này:

$yourValue = '5 " inches'; 

Bạn sẽ nhận được từ này tạo ra HTML:

<input name="..." value="5 " inches" /> 

Để một mà, mà làm việc tốt hơn nhiều:

<input name="..." value="5 &quot; inches" /> 
+2

Vậy điều gì sẽ xảy ra khi bạn gửi trường nhập đó? Nó sẽ đi vào một cơ sở dữ liệu như " và sau đó bạn sẽ phải chuyển đổi nó ở một nơi khác? Điều gì sẽ xảy ra nếu bạn muốn gửi nó với dấu ngoặc kép thực tế trong đó. – mikato

+0

+1 để có thêm mô tả, đề cập đến mã hóa và vì 'htmlspecialchars()' là đủ. – DanMan

0

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

echo '<input name="..." value="' . htmlspecialchars(stripslashes($yourValue)) . '" />'; 

hoặc

<input name="..." value="<?php echo htmlspecialchars(stripslashes($value)); ?>"> 

Chúc may mắn;)

5

Khi sử dụng charset UTF-8, tôi sử dụng mã dưới đây để có được Iñtërnâtiônàlizætiøn VÀ đôi (hoặc đơn) trích dẫn phải:

<input type="text" name="title" value="<?php echo htmlentities(stripslashes(utf8_decode($title))); ?>" /> 

ps: điều này rất hữu ích sau khi ai đó gửi biểu mẫu, nhưng khi đầu vào không được xác thực.

+0

Tôi thích sử dụng 'stripcslashes()' để duy trì các dòng thay đổi. – Raptor

0

Đây là một chút cũ nhưng tôi tìm thấy nó vì vậy tôi nghĩ rằng tôi sẽ đóng góp những gì tôi đã học được.

Tôi đã tìm thấy nếu bạn có dấu ngoặc kép trong một biến trong javascript (từ AJAX/cơ sở dữ liệu gì) và bạn muốn đặt nó trong một trường - nếu bạn xây dựng toàn bộ trường/biểu mẫu html và sau đó hoán đổi thành div sử dụng innerHTML, dấu ngoặc kép trong giá trị sẽ gây ra vấn đề. Tôi đã làm điều này và tôi không thể tìm ra cách nào đó bằng cách trốn thoát.

Bạn nên tạo html với trường và hoán đổi nó trước tiên, sau đó thực hiện một document.getElementById ('myfieldid'). Value = thevalue; thay vào đó và nó hoạt động tốt.

+1

Đối với một giải pháp Javascript này làm việc và đã cho tôi ra khỏi một mứt. Không ai đề cập đến chủ đề này cần phải có trong PHP. Vì vậy, tôi lấy đi -1 của bạn. :) Cảm ơn bạn đã tìm ra điều này. Nếu không nó sẽ đưa tôi cả đêm để sửa chữa một lỗi. – Paul

+0

Cảm ơn :) Đó là một vấn đề kỳ lạ và tôi không thể tin rằng việc trốn thoát không hiệu quả. Thật tốt khi biết điều đó đã giúp ích và tôi không phải là người duy nhất có nỗi đau này. – mikato

0

Personnaly tôi sử dụng thủ thuật này:

$s = str_replace("& amp ;", "&", (htmlentities(stripslashes($s), ENT_QUOTES, 'UTF-8'))); 
0

tôi cần phải áp dụng htmlspecialcars() để truy vấn mảng kết quả.Tôi tìm thấy a useful solution from here (xem bình luận của sean).

//create a cleaning function 
function _clean(&$value) { 
    $value = htmlspecialchars($value); 
    //$value = htmlspecialchars($value, ENT_QUOTES);//alternative 
} 

//fetch the data from DB somehow (sqlQ is a custom function) 
$q = "..."; 
$r = $d->sqlQ($q); 
$row = mysqli_fetch_array($r,MYSQLI_ASSOC); 

//...call the function recursively (not always necessary) to the resultset row 
array_walk_recursive($row, '_clean'); 

Nó làm một công việc khá chút không cần thiết nếu bạn lấy chỉ một vài cột văn bản nhưng ít nhất bạn không cần phải viết htmlspecialchars() chức năng mẫu HTML nhiều lần.

6

Đối với UTF-8, tôi đã truy cập htmlspecialchars($value, ENT_QUOTES, "UTF-8") đã thực hiện thủ thuật.

stack source

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