sayfa bir e-posta olarak gönderilir linkleri boşluklar veya% 20 + işaretleriyle dönüşebilir

2 Cevap php

Ben haber (başlık, makale, url) girişini kabul eden bir web uygulaması oluşturma. Öyle gibi, belirtilen tarihler için girilen tüm haber bir özetini oluşturur news.php bir sayfa vardır:

News
4/25/2010

Title 1
[URL 1]
Article 1

Title 2
[URL 2]
Article 2

ve böylece ...

Bir file_get_contents() çağrı yoluyla news.php now her ikisi de iki diğer sayfalara, yani preview.php ve send.php, var.

Her şey URL boşluk varsa dışında çalışıyor. (: Boşluk boşluk vardır, Krom: alanlarda% 20 olan FF) Önizleme sırasında, adresler açılmış olsun. Alanlarda + işaretleriyle dönüştürülür, çünkü e-postalar olarak alınan Ancak, sırasında, Gönder, adresler, açılmış alamadım.

Örneğin:

  1. Preview in FF: http://www.example.com/this is the link.html
  2. Chrome'da Önizleme: http://www.example.com/this%20is%20the%20link.html
  3. Iki tarayıcılarda e-posta olarak Görüntülenen: http://www.example.com/this+is+the+link.html

Sadece 3. (link açılmış almaz) çalışmıyor.

Neden önizlendiğinde (boşluk veya% 20) doğru adresler içinde boşluk vardır, ama yanlış (+) aslında aynı sayfa, aynı news.php tarafından oluşturulan olduğunda, e-postalarda alındığında?

Herhangi bir yardım mutluluk :)


EDIT:

preview.php:

$HTML_version = file_get_contents('news.php');
echo $HTML_version;

send.php

$HTML_version = file_get_contents('news.php');
$body = "$notice_text

--$mime_boundary
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

$TEXT_version

--$mime_boundary
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

$HTML_version

--$mime_boundary--";
//some other code here to send the email

news.php:

<a href="<?php echo $url ?>">attachment</a>
//the $url there contains spaces

2 Cevap

Hangi posta istemcisi kullanıyorsunuz? HTML posta müşterilerin kullanım aşırı sınırlamalar ve hatalar tabidir.

<a href="<?php echo $url ?>">attachment</a>
//the $url there contains spaces

URL'ler tanımı gereği, boşluk içeremez. Eğer HTML bir bağlantı bir boşluk eklerseniz:

<a href="x y.z">

Tarayıcı tipik x%20y.z için kodlama, sizin hatayı düzeltmek olacaktır. Ancak bu standart bir davranış değildir ve bunu güvenmemelisiniz. Bazı tehlikeli posta istemcisi x+y.z yerine, hangi iş olmaz o kadar 'sabitleme' misguidedly olabilir, sanırım, mümkün olduğu için + bir URL yolu kesiminde not bir alan demek.

rawurlencode() URL kodlama için kullanın. Bu fonksiyon ile, alanlarda URL yolu-parça and sorgu dizeleri için uygun olan, %20 dönüştürülür. PHP'nin yanlış adlandırılmış urlencode() function sorgu dizesinde form verilerini sadece uygun olduğu, bunun yerine + için kodlar.

Ayrıca çıkış htmlspecialchars() her zaman HTML bir dize kullanmak gerekir.

$name= 'this is the link';
$url= 'http://www.example.com/'.rawurlencode($name).'.html';

<a href="<?php echo htmlspecialchars($url); ?>">link</a>

+ Işaretleri boşluk veya% 20 için bir miras yerine, bu yüzden iyi çalışması gerekir. Onlar yok çünkü ben elle% 20 URL tüm boşlukları dönüştürülmüş öneriyoruz. Bu sorunu düzeltmek gerekir.