Инструмент или способ правильного кодирования параметров темы и тела в ссылках mailto?

Как конвертировать ссылку так:

mailto:[email protected]?body=Buongiorno, gradirei ricevere maggiori informazioni in merito alla possibilità di personalizzare i vostri prodotti.&subject=richiesta informazioni per personalizzazione prodotti

В этом:

mailto:[email protected]?body=Buongiorno%2C%20gradirei%20ricevere%20maggiori%20informazioni%20in%20merito%20alla%20possibilit%C3%A0%20di%20personalizzare%20i%20vostri%20prodotti%26subject%3Drichiesta%20informazioni%20per%20personalizzazione%20prodotti%0A

Я искал онлайн инструменты, но не нашел ничего действительно полезного

1

Решение

Хорошо, это ссылки, которые действительно выполняют работу encodeURI:

http://meyerweb.com/eric/tools/dencoder/

http://pressbin.com/tools/urlencode_urldecode/

Они используют функцию encodeURI и выдают такую ​​строку:

Buongiorno%2C%20gradirei%20ricevere%20maggiori%20informazioni%20in%20merito%20alla%20possibilit%C3%A0 etc etc....

В то время как большинство онлайн-кодировщиков ошибочно (для моих нужд) выдают такую ​​строку:

Buongiorno%2C+gradirei+ricevere+maggiori+informazioni+in+merito+alla+possibilit%C3%A0+di+personalizzare etc etc...

Причина в том, что они используют urlencode () вместо encodeURI ()

1

Другие решения

Как отмечено Stratboy в его хороший ответ, Вы должны закодировать свой предмет и тело, используя функцию, кодирующую вашу ссылку в URI (как, например, та, что дана commonpike в этот ответ), не просто url_encodeд:

<?php
function encodeURI($url) {
// http://php.net/manual/en/function.rawurlencode.php
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI
$unescaped = array(
'%2D'=>'-','%5F'=>'_','%2E'=>'.','%21'=>'!', '%7E'=>'~',
'%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'
);
$reserved = array(
'%3B'=>';','%2C'=>',','%2F'=>'/','%3F'=>'?','%3A'=>':',
'%40'=>'@','%26'=>'&','%3D'=>'=','%2B'=>'+','%24'=>'$'
);
$score = array(
'%23'=>'#'
);
return strtr(rawurlencode($url), array_merge($reserved,$unescaped,$score));

}

$email = '[email protected]';
$subject = 'richiesta informazioni per personalizzazione prodotti';
$body = 'Buongiorno, gradirei ricevere maggiori informazioni in merito alla possibilità di personalizzare i vostri prodotti.';

$mailtoURI = 'mailto:'.$email.'?body='.encodeURI($body).'?subject='.encodeURI($subject);
$mailtoUrlEncode = 'mailto:'.$email.'?body='.urlencode($body).'?subject='.urlencode($subject);

echo $mailtoURI; //the good one
echo $mailtoUrlEncode; //the wrong one

Выход из $mailtoURI:

электронная почта:?.? [email protected] тело = Buongiorno,% 20gradirei% 20ricevere% 20maggiori% 20informazioni% 20in% 20merito% 20alla% 20possibilit% C3% A0% 20di% 20personalizzare% 20i% 20vostri% 20prodotti при условии = Richiesta% 20informazioni% 20per% 20personalizzazione% 20prodotti

С urlencode (обратите внимание, что пространство, например, не закодировано, в то время как они должны, как описано в MDN):

электронная почта:? [email protected] тело = Buongiorno% 2C + gradirei + ricevere + Maggiori + Informazioni + в + Merito + алл + possibilit% C3% A0 + ди + personalizzare + I + vostri + Prodotti при условии = Richiesta + Informazioni.? + на + personalizzazione + Prodotti

Вы можете закодировать его непосредственно в Javascript:

var email = '[email protected]';
var subject = 'richiesta informazioni per personalizzazione prodotti';
var body = 'Buongiorno, gradirei ricevere maggiori informazioni in merito alla possibilità di personalizzare i vostri prodotti.'

var mailto = 'mailto:' + email + '?body=' + encodeURI($body) + '?subject=' + encodeURI($subject);
console.log(mailto);

Или, если вы не хотите его кодировать, вы можете использовать онлайн-инструменты, такие как те, что даны в ответе Стратбоя.

1

Я только что создал немного другую версию Commonpike’s:

  public static function encodeURI($url) {
$unescaped = array(
'%2D'=>'-','%5F'=>'_','%2E'=>'.','%21'=>'!', '%7E'=>'~',
'%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'
);
$reserved = array(
'%3B'=>';','%2C'=>',','%2F'=>'/','%3F'=>'?','mailto%3A'=>'mailto:',
'%3A%2F%2F'=>'://','%40'=>'@','%26'=>'&','%3D'=>'=','%2B'=>'+','%24'=>'$'
);
$score = array(
'%23'=>'#'
);
return strtr(rawurlencode($url), array_merge($reserved,$unescaped,$score));
}

Смотрите $ зарезервированный массив:

'mailto%3A'=>'mailto:','%3A%2F%2F'=>'://'

Мне нужно было указать их, потому что я не хочу возвращать ВСЕ «:». Только те, которые используются в протоколах. Например, если мне нужно закодировать URI, содержащий почтовое тело, с некоторым внутренним символом «:», мне нужно будет их кодировать, особенно если я сохраняю URI в некоторое сериализованное поле БД («:», вероятно, что-то сломает ..). Итак, это моя версия. Не знаю, полезно ли это для всех. Но я просто делюсь.

0
По вопросам рекламы [email protected]