2015-09-30 2 views
2

У меня есть 2 файла: test.php и test.html с таким же содержаниемPHP: Кодировка URL

<meta charset="utf-8"> 
<script> 
    document.write(encodeURIComponent(';²')); 
</script> 

Выход для РНР %3B%3F и HTML является %3B%C2%B2. Как получить тот же результат для php? Как преобразовать в %3B%C2%B2 с помощью php-функций?

+0

вэй я запустить тот же контент в PHP и HTML файл и нашел% 3B% C2% B2..so можно сказать, у коды одинаковы в обоих файлах? – DevLakshman

+1

Где PHP фактор в это точно ...? '% 3F' - это символ?? персонаж. Я подозреваю, что здесь некорректное обращение с кодировками, которое превращает ² в?, Которое вы затем urlencode. Покажите свой PHP-код. – deceze

+0

Спасибо! Моя среда IDE вернет кодировку файлов с UTF-8 на ANSI, но все равно отображает * ² * правильно. Если файл сохранен в UTF-8, то вывод одинаков. – VitVoj

ответ

0

Вы можете использовать urlencode() функцию

echo urlencode(';²'); 

Выше функциональных выходов %3B%C2%B2

1

Вы можете использовать функцию html_entity_decode() и HTML entitycode для ², который &sup2; Ваш код будет выглядеть примерно так:

<meta charset="utf-8"> 
    <script> 
     document.write(encodeURIComponent(';<?php echo html_entity_decode("&sup2;") ?>')); 
    </script> 
+0

... или вы можете просто убедиться, что правильно обрабатываете кодировки ... – deceze

0

Спасибо! Моя IDE вернет кодировку файлов с UTF-8 на ANSI, но все равно правильно отображает ². Если файл сохранен в UTF-8, то вывод одинаков.

0

Вы не указать, какие функции PHP был использован, но я хотел бы предложить

НО вы должны иметь в виду, что есть небольшие различия. Ребята на http://phpjs.org/functions/urlencode/ из JS эквивалентно phpencode:

function urlencode(str) { 
    //  discuss at: http://phpjs.org/functions/urlencode/ 
    //  original by: Philip Peterson 
    //  improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    //  improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    //  improved by: Brett Zamir (http://brett-zamir.me) 
    //  improved by: Lars Fischer 
    //   input by: AJ 
    //   input by: travc 
    //   input by: Brett Zamir (http://brett-zamir.me) 
    //   input by: Ratheous 
    //  bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    //  bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    //  bugfixed by: Joris 
    // reimplemented by: Brett Zamir (http://brett-zamir.me) 
    // reimplemented by: Brett Zamir (http://brett-zamir.me) 
    //    note: This reflects PHP 5.3/6.0+ behavior 
    //    note: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on 
    //    note: pages served as UTF-8 
    //  example 1: urlencode('Kevin van Zonneveld!'); 
    //  returns 1: 'Kevin+van+Zonneveld%21' 
    //  example 2: urlencode('http://kevin.vanzonneveld.net/'); 
    //  returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F' 
    //  example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'); 
    //  returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a' 

    str = (str + '') 
    .toString(); 

    // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current 
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following. 
    return encodeURIComponent(str) 
    .replace(/!/g, '%21') 
    .replace(/'/g, '%27') 
    .replace(/\(/g, '%28') 
    . 
    replace(/\)/g, '%29') 
    .replace(/\*/g, '%2A') 
    .replace(/%20/g, '+'); 
} 
+0

Почему бесполезная преамбула этой функции длиннее самого тела функции ...?! O_o И действительно ли это нужно полностью цитировать здесь? – deceze

+0

хотел сохранить примеры и авторов в случае, если исходная ссылка перестанет существовать –

Смежные вопросы