2011-07-22 57 views
15

Dữ liệu của tôi có nhiều thực thể HTML trong đó (• ... vv) bao gồm '. Tôi chỉ muốn chuyển nó thành tương đương ký tự của nó.Chuyển đổi ' thành dấu nháy đơn trong PHP

Tôi giả định htmlspecialchars_decode() sẽ hoạt động nhưng không may mắn. Suy nghĩ?

Tôi cố gắng này:

echo htmlspecialchars_decode('They're here.'); 

Nhưng nó sẽ trả về: They're here.

Edit:

Tôi cũng đã thử html_entity_decode(), nhưng nó dường như không làm việc:

echo html_entity_decode('They're here.') 

a lso trả về: They're here.

Trả lời

29

' không phải là một phần của HTML 4.01, nó không được chuyển đổi thành ' theo mặc định.

Trong PHP 5.4.0, extra flags were introduced để xử lý các ngôn ngữ khác nhau, mỗi ngôn ngữ bao gồm ' làm thực thể.

Điều này có nghĩa bạn có thể làm một cái gì đó như thế này:

echo html_entity_decode('They're here.', ENT_QUOTES | ENT_HTML5); 

Bạn sẽ cần cả hai ENT_QUOTES (chuyển đổi dấu nháy đơn và kép) và ENT_HTML5 (hoặc bất kỳ ngôn ngữ cờ khác hơn ENT_HTML401, nên chọn thích hợp nhất để bạn tình hình).

Trước PHP 5.4.0, bạn sẽ cần phải sử dụng str_replace:

echo str_replace(''', "'", 'They're here.'); 
+0

Tôi đã cập nhật câu trả lời cho PHP 5.4.0 (đạo cụ để eric.itzhak để cập nhật). – cmbuckley

1

Điều bạn đang thực sự tìm kiếm là html_entity_decode().

html_entity_decode() dịch tất cả các đối tượng thành các ký tự, trong khi htmlspecialchars_decode() chỉ đảo ngược nội dung htmlspecialchars() sẽ mã hóa.

EDIT: Nhìn vào ví dụ trên trang tôi liên kết với, tôi đã nghiên cứu kỹ hơn một chút và sau đây dường như không làm việc:

[[email protected] ~]$ php 
<?php 
$tmp = array_flip(get_html_translation_table(HTML_ENTITIES)); 
var_dump($tmp['&apos;']); 
PHP Notice: Undefined index: &apos; in - on line 3 
NULL 

Đây là lý do tại sao nó không làm việc. Tại sao nó không có trong bảng tra cứu là một câu hỏi khác hoàn toàn, một cái gì đó tôi không thể trả lời không may.

+0

không may mắn. html_entity_decode vẫn trả về ' – Dave

+0

@Dave: Không may, bạn có thể cần phải cuộn của riêng bạn ... Có vẻ như PHP không hỗ trợ đảo ngược ''' vì một lý do nào đó. Xem chỉnh sửa của tôi để biết thêm. –

+0

Và có vẻ như đó là vì ''' không phải là một phần của HTML 4.01. – cmbuckley

-4

Bạn đã thử sử dụng echo htmlspecialchars('They&apos;re here.')?

Tôi nghĩ đó là những gì bạn đang tìm kiếm.

+2

Tôi tin rằng điều đó trái ngược với những gì tôi muốn. – Dave

2

này nên làm việc:

$value = "They&apos;re here."; 
html_entity_decode(str_replace("&apos;","'",$value)); 
+0

Tôi đánh giá cao thời gian của bạn, nhưng điều này giống như câu trả lời đã được phê duyệt. – Dave

3

Có một "quyền" bằng cách nào, mà không sử dụng str_replace, @cbuckley được ngay đó là bởi vì mặc định cho html_entity_decode là HTML 4.01, nhưng bạn có thể đặt tham số HTML 5 sẽ giải mã nó.

Sử dụng nó như thế này:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5) 
Các vấn đề liên quan