PHP URL Çözme

5 Cevap php

PHP'nin urldecode işlevini kullanarak bu URL dizesi çözmek için çalışıyorum:

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

Bu çıkış gerekiyordu ...

'Antônio Carlos Jobim'

... Ama onun yerine bu ouptutting edilir

'Antônio Carlos Jobim'

Ben büyük bir başarı ile bir JS-based online decoder dize test ettik, ancak bu işlem sunucu tarafı yapmak için görünmüyor olabilir. Herhangi bir fikir?

5 Cevap

Sizin dize also UTF-8 kodlanmış. Bu çalışacaktır:

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

Çıktı: "Antonio Carlos Jobim".

Aslında, istenen çıktı almak, ancak UTF-8 olarak yorumlanmaz. Bu bir HTTP uygulamaya ise, UTF-8 kullanmak için istemci söylerdim başlık veya meta etiketi (veya her ikisi) göndermeleri gerekmektedir.

Edit:, örneğin:

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

Ayrıca sayfaya yankılanan önce htmlenteties kullanıyor musunuz? Ben sadece kodunuzu test edildiğinde bu sadece urldecode("Ant%C3%B4nio+Carlos+Jobim"); bölümü ile iyi çalıştı, ama onu koştu zaman yaptığı gibi htmlentities Ben aynı çıktıyı aldım.

Bu bir UTF-8 karakterler ile sorun ve nasıl PHP htmlentities fonksiyonunu kolları gibi görünüyor.

Ben ne zaman

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

Gibi benim tarayıcıda doğru şekilde görüntüleme

Antonio Carlos Jobim

I XAMPP ile test ettik

başka bir seçenek:

<?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;
?>

çıkışı olur: http://mysite.com