Как кодировать URL-адрес содержит символы Unicode с PHP - PullRequest
5 голосов
/ 28 марта 2012

В настоящее время я пытаюсь найти решение для кодирования URL, которое содержит символы Unicode, кхмерский Unicode.Я попытался использовать встроенную функцию php urlencode (), и он дает результат: Например: http://www.example.com/?kwd=Mac+Book+Pro+នៅប្រទេសយើង

Пока я тестировал с помощью поиска Google, он приводит: https://www.google.com.kh/#hl=en&sclient=psy-ab&q=Mac+Book+Pro+%E1%9E%93%E1%9F%85%E1%9E%94%E1%9F%92%E1%9E%9A%E1%9E%91%E1%9F%81%E1%9E%9F%E1%9E%99%E1%9E%BE%E1%9E%84&oq=Mac+Book+Pro+%E1%9E%93%E1%9F%85%E1%9E%94%E1%9F%92%E1%9E%9A%E1%9E%91%E1%9F%81%E1%9E%9F%E1%9E%99%E1%9E%BE%E1%9E%84

Как это сделать?Надеюсь, кто-то здесь поможет мне.Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 28 марта 2012

Для UTF-8 вы можете использовать:

urlencode(utf8_encode($string)); //for encoding

utf8_decode(urldecode($string)); //for decoding

Для UTF-16 вы можете использовать эту функцию (из примечаний для "urlencode" в http://php.net):

function utf16_urlencode ( $str ) {
     # convert characters > 255 into HTML entities
     $convmap = array( 0xFF, 0x2FFFF, 0, 0xFFFF );
     $str = mb_encode_numericentity( $str, $convmap, "UTF-8");

     # escape HTML entities, so they are not urlencoded
     $str = preg_replace( '/&#([0-9a-fA-F]{2,5});/i', 'mark\\1mark', $str );
     $str = urlencode($str);

     # now convert escaped entities into unicode url syntax
     $str = preg_replace( '/mark([0-9a-fA-F]{2,5})mark/i', '%u\\1', $str );
     return $str;
 }
1 голос
/ 04 февраля 2018
function cleanUrl($url) {
    $res= urlencode(utf8_encode($url));
    $res = str_replace("%3A",":",$res);
    $res = str_replace("%2F","/",$res);
    return $res;
}
0 голосов
/ 28 марта 2012

Попробуйте rawurlencode

http://php.net/manual/en/function.rawurlencode.php

...