2009-11-18 63 views
24

tôi đang cố gắng để giải mã chuỗi URL này sử dụng chức năng urldecode PHP:URL giải mã trong PHP

urldecode("Ant%C3%B4nio+Carlos+Jobim"); 

Đây là vụ phải đầu ra ...

'Antônio Carlos Jobim' 

... mà thay vào đó là ouptutting này

'Antônio Carlos Jobim' 

Tôi đã thử nghiệm chuỗi trong một JS-based online decoder với thành công lớn, nhưng dường như không thể làm việc này ở phía máy chủ. Bất kỳ ý tưởng?

+1

Bạn đang sử dụng phương pháp nào để xuất? – Kazar

Trả lời

47

Chuỗi của bạn là cũng UTF-8 được mã hóa. Điều này sẽ hoạt động:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim")); 

Kết quả: "Antônio Carlos Jobim".

+4

chỉ khi trang khai báo mã hóa 'ISO-8859-1'. – Kornel

12

Thực ra, bạn nhận được kết quả mong muốn, nhưng nó không được hiểu là UTF-8. Nếu đây là một ứng dụng HTTP, bạn nên gửi một tiêu đề hoặc một thẻ meta (hoặc cả hai) sẽ cho khách hàng biết sử dụng UTF-8.

Edit: ví dụ:

// replace text/html with the content type you're using 
header('Content-Type: text/html; charset=UTF-8'); 
1

Bạn cũng sử dụng htmlenteties trước khi lặp lại nó để trang? Khi tôi chỉ kiểm tra mã của bạn nó làm việc tốt với chỉ một phần urldecode("Ant%C3%B4nio+Carlos+Jobim");, nhưng khi tôi chạy nó thông qua htmlentities tôi nhận được sản lượng tương tự như bạn đã làm.

Dường như có vấn đề với các ký tự UTF-8 và cách PHP xử lý chức năng htmlentities.

+1

Nó hoạt động chính xác nếu bạn chỉ định mã hóa đúng làm tham số '$ charset'. Và dù sao, bạn nên sử dụng 'htmlspecialchars', không phải' htmlentities', nếu tất cả những gì bạn muốn làm là bảo vệ khỏi XSS. –

1

khi tôi làm

<?php 
echo urldecode("Ant%C3%B4nio+Carlos+Jobim"); 
?> 

hiển thị của nó một cách chính xác trong trình duyệt của tôi như

Antônio Carlos Jobim

tôi đã thử nghiệm với XAMPP

0

tùy chọn khác là:

<?php 
$smthing = 'http%3A%2F%2Fmysite.com'; 
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($smthing)); 
$smthing = html_entity_decode($smthing,null,'UTF-8'); 
echo $smthing; 
?> 

đầu ra trở thành: http://mysite.com

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