Как конвертировать ссылку так:
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
Я искал онлайн инструменты, но не нашел ничего действительно полезного
Хорошо, это ссылки, которые действительно выполняют работу 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 ()
Как отмечено 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);
Или, если вы не хотите его кодировать, вы можете использовать онлайн-инструменты, такие как те, что даны в ответе Стратбоя.
Я только что создал немного другую версию 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 в некоторое сериализованное поле БД («:», вероятно, что-то сломает ..). Итак, это моя версия. Не знаю, полезно ли это для всех. Но я просто делюсь.