Version 3.4.5

This commit is contained in:
Neo committed 2025-12-19 00:38:12 -08:00
1 parent fb6b5baabc
commit e4478369d8
1360 files changed
+228921 -179445

No files matched your search

+49 -24
View File
@@ -48,7 +48,7 @@
* @author Aleksander Machniak <alec@php.net>
* @copyright 2003-2006 PEAR <pear-group@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version CVS: $Id: mime.php 8229 2011-03-31 10:17:44Z ips_terabyte $
* @version CVS: $Id: mime.php 11977 2013-02-12 11:06:34Z mark $
* @link http://pear.php.net/package/Mail_mime
*
* This class is based on HTML Mime Mail class from
@@ -63,7 +63,7 @@
*
* This package depends on PEAR to raise errors.
*/
require_once 'PEAR.php';/*noLibHook*/
require_once 'PEAR.php';
/**
* require Mail_mimePart
@@ -72,7 +72,7 @@ require_once 'PEAR.php';/*noLibHook*/
* create all the different parts a mail can
* consist of.
*/
require_once 'Mail/mimePart.php';/*noLibHook*/
require_once 'Mail/mimePart.php';
/**
@@ -245,7 +245,7 @@ class Mail_mime
}
} else {
$cont = $this->_file2str($data);
if (PEAR::isError($cont)) {
if ($this->_isError($cont)) {
return $cont;
}
if (!$append) {
@@ -286,7 +286,7 @@ class Mail_mime
$this->_htmlbody = $data;
} else {
$cont = $this->_file2str($data);
if (PEAR::isError($cont)) {
if ($this->_isError($cont)) {
return $cont;
}
$this->_htmlbody = $cont;
@@ -336,7 +336,7 @@ class Mail_mime
$filedata = null;
$bodyfile = $file;
} else {
if (PEAR::isError($filedata = $this->_file2str($file))) {
if ($this->_isError($filedata = $this->_file2str($file))) {
return $filedata;
}
}
@@ -387,6 +387,8 @@ class Mail_mime
* @param string $description Content-Description header
* @param string $h_charset The character set of the headers e.g. filename
* If not specified, $charset will be used
* @param array $add_headers Additional part headers. Array keys can be in form
* of <header_name>:<parameter_name>
*
* @return mixed True on success or PEAR_Error object
* @access public
@@ -403,7 +405,8 @@ class Mail_mime
$n_encoding = null,
$f_encoding = null,
$description = '',
$h_charset = null
$h_charset = null,
$add_headers = array()
) {
$bodyfile = null;
@@ -413,12 +416,12 @@ class Mail_mime
$filedata = null;
$bodyfile = $file;
} else {
if (PEAR::isError($filedata = $this->_file2str($file))) {
if ($this->_isError($filedata = $this->_file2str($file))) {
return $filedata;
}
}
// Force the name the user supplied, otherwise use $file
$filename = ($name ? $name : $file);
$filename = ($name ? $name : $this->_basename($file));
} else {
$filedata = $file;
$filename = $name;
@@ -429,7 +432,6 @@ class Mail_mime
$err = PEAR::raiseError($msg);
return $err;
}
$filename = $this->_basename($filename);
$this->_parts[] = array(
'body' => $filedata,
@@ -442,6 +444,7 @@ class Mail_mime
'location' => $location,
'disposition' => $disposition,
'description' => $description,
'add_headers' => $add_headers,
'name_encoding' => $n_encoding,
'filename_encoding' => $f_encoding,
'headers_charset' => $h_charset,
@@ -458,7 +461,7 @@ class Mail_mime
* @return string Contents of $file_name
* @access private
*/
function &_file2str($file_name)
function _file2str($file_name)
{
// Check state of file and raise an error properly
if (!file_exists($file_name)) {
@@ -497,7 +500,7 @@ class Mail_mime
* @return object The text mimePart object
* @access private
*/
function &_addTextPart(&$obj, $text)
function _addTextPart(&$obj, $text)
{
$params['content_type'] = 'text/plain';
$params['encoding'] = $this->_build_params['text_encoding'];
@@ -523,7 +526,7 @@ class Mail_mime
* @return object The html mimePart object
* @access private
*/
function &_addHtmlPart(&$obj)
function _addHtmlPart(&$obj)
{
$params['content_type'] = 'text/html';
$params['encoding'] = $this->_build_params['html_encoding'];
@@ -547,7 +550,7 @@ class Mail_mime
* @return object The multipart/mixed mimePart object
* @access private
*/
function &_addMixedPart()
function _addMixedPart()
{
$params = array();
$params['content_type'] = 'multipart/mixed';
@@ -569,7 +572,7 @@ class Mail_mime
* @return object The multipart/mixed mimePart object
* @access private
*/
function &_addAlternativePart(&$obj)
function _addAlternativePart(&$obj)
{
$params['content_type'] = 'multipart/alternative';
$params['eol'] = $this->_build_params['eol'];
@@ -593,7 +596,7 @@ class Mail_mime
* @return object The multipart/mixed mimePart object
* @access private
*/
function &_addRelatedPart(&$obj)
function _addRelatedPart(&$obj)
{
$params['content_type'] = 'multipart/related';
$params['eol'] = $this->_build_params['eol'];
@@ -616,7 +619,7 @@ class Mail_mime
* @return object The image mimePart object
* @access private
*/
function &_addHtmlImagePart(&$obj, $value)
function _addHtmlImagePart(&$obj, $value)
{
$params['content_type'] = $value['c_type'];
$params['encoding'] = 'base64';
@@ -647,7 +650,7 @@ class Mail_mime
* @return object The image mimePart object
* @access private
*/
function &_addAttachmentPart(&$obj, $value)
function _addAttachmentPart(&$obj, $value)
{
$params['eol'] = $this->_build_params['eol'];
$params['filename'] = $value['name'];
@@ -680,6 +683,9 @@ class Mail_mime
if (!empty($value['description'])) {
$params['description'] = $value['description'];
}
if (is_array($value['add_headers'])) {
$params['headers'] = $value['add_headers'];
}
$ret = $obj->addSubpart($value['body'], $params);
return $ret;
@@ -712,7 +718,7 @@ class Mail_mime
$body = $this->get($params);
if (PEAR::isError($body)) {
if ($this->_isError($body)) {
return $body;
}
@@ -1013,7 +1019,7 @@ class Mail_mime
if ($filename) {
// Append mimePart message headers and body into file
$headers = $message->encodeToFile($filename, $boundary, $skip_head);
if (PEAR::isError($headers)) {
if ($this->_isError($headers)) {
return $headers;
}
$this->_headers = array_merge($this->_headers, $headers);
@@ -1021,7 +1027,7 @@ class Mail_mime
return $ret;
} else {
$output = $message->encode($boundary, $skip_head);
if (PEAR::isError($output)) {
if ($this->_isError($output)) {
return $output;
}
$this->_headers = array_merge($this->_headers, $output['headers']);
@@ -1142,8 +1148,8 @@ class Mail_mime
? $this->_build_params['eol'] : "\r\n";
// add parameters
$token_regexp = '#([^\x21,\x23-\x27,\x2A,\x2B,\x2D'
. ',\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#';
$token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
. '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
if (is_array($params)) {
foreach ($params as $name => $value) {
if ($name == 'boundary') {
@@ -1319,7 +1325,8 @@ class Mail_mime
*/
function encodeHeader($name, $value, $charset, $encoding)
{
return Mail_mimePart::encodeHeader(
$mime_part = new Mail_mimePart;
return $mime_part->encodeHeader(
$name, $value, $charset, $encoding, $this->_build_params['eol']
);
}
@@ -1465,4 +1472,22 @@ class Mail_mime
}
}
/**
* PEAR::isError wrapper
*
* @param mixed $data Object
*
* @return bool True if object is an instance of PEAR_Error
* @access private
*/
function _isError($data)
{
// PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
if (is_object($data) && is_a($data, 'PEAR_Error')) {
return true;
}
return false;
}
} // End of class
+1 -1
View File
@@ -52,7 +52,7 @@
* @author Sean Coates <sean@php.net>
* @copyright 2003-2006 PEAR <pear-group@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version CVS: $Id: mimeDecode.php 10914 2012-06-12 14:14:49Z bfarber $
* @version CVS: $Id: mimeDecode.php 10705 2012-05-08 15:35:49Z mark $
* @link http://pear.php.net/package/Mail_mime
*/
+80 -23
View File
@@ -48,7 +48,7 @@
* @author Aleksander Machniak <alec@php.net>
* @copyright 2003-2006 PEAR <pear-group@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version CVS: $Id: mimePart.php 8229 2011-03-31 10:17:44Z ips_terabyte $
* @version CVS: $Id: mimePart.php 11977 2013-02-12 11:06:34Z mark $
* @link http://pear.php.net/package/Mail_mime
*/
@@ -131,6 +131,7 @@ class Mail_mimePart
*/
var $_eol = "\r\n";
/**
* Constructor.
*
@@ -144,7 +145,7 @@ class Mail_mimePart
* charset - Content character set
* cid - Content ID to apply
* disposition - Content disposition, inline or attachment
* dfilename - Filename parameter for content disposition
* filename - Filename parameter for content disposition
* description - Content description
* name_encoding - Encoding of the attachment name (Content-Type)
* By default filenames are encoded using RFC2231
@@ -155,6 +156,8 @@ class Mail_mimePart
* headers_charset - Charset of the headers e.g. filename, description.
* If not set, 'charset' will be used
* eol - End of line sequence. Default: "\r\n"
* headers - Hash array with additional part headers. Array keys can be
* in form of <header_name>:<parameter_name>
* body_file - Location of file with part's body (instead of $body)
*
* @access public
@@ -167,6 +170,11 @@ class Mail_mimePart
$this->_eol = MAIL_MIMEPART_CRLF;
}
// Additional part headers
if (!empty($params['headers']) && is_array($params['headers'])) {
$headers = $params['headers'];
}
foreach ($params as $key => $value) {
switch ($key) {
case 'encoding':
@@ -185,6 +193,11 @@ class Mail_mimePart
case 'body_file':
$this->_body_file = $value;
break;
// for backward compatibility
case 'dfilename':
$params['filename'] = $value;
break;
}
}
@@ -210,13 +223,17 @@ class Mail_mimePart
$params['headers_charset'] = $params['charset'];
}
}
// header values encoding parameters
$h_charset = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII';
$h_language = !empty($params['language']) ? $params['language'] : null;
$h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null;
if (!empty($params['filename'])) {
$headers['Content-Type'] .= ';' . $this->_eol;
$headers['Content-Type'] .= $this->_buildHeaderParam(
'name', $params['filename'],
!empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
!empty($params['language']) ? $params['language'] : null,
!empty($params['name_encoding']) ? $params['name_encoding'] : null
'name', $params['filename'], $h_charset, $h_language, $h_encoding
);
}
@@ -226,23 +243,41 @@ class Mail_mimePart
if (!empty($params['filename'])) {
$headers['Content-Disposition'] .= ';' . $this->_eol;
$headers['Content-Disposition'] .= $this->_buildHeaderParam(
'filename', $params['filename'],
!empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
!empty($params['language']) ? $params['language'] : null,
'filename', $params['filename'], $h_charset, $h_language,
!empty($params['filename_encoding']) ? $params['filename_encoding'] : null
);
}
// add attachment size
$size = $this->_body_file ? filesize($this->_body_file) : strlen($body);
if ($size) {
$headers['Content-Disposition'] .= ';' . $this->_eol . ' size=' . $size;
}
}
if (!empty($params['description'])) {
$headers['Content-Description'] = $this->encodeHeader(
'Content-Description', $params['description'],
!empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
!empty($params['name_encoding']) ? $params['name_encoding'] : 'quoted-printable',
'Content-Description', $params['description'], $h_charset, $h_encoding,
$this->_eol
);
}
// Search and add existing headers' parameters
foreach ($headers as $key => $value) {
$items = explode(':', $key);
if (count($items) == 2) {
$header = $items[0];
$param = $items[1];
if (isset($headers[$header])) {
$headers[$header] .= ';' . $this->_eol;
}
$headers[$header] .= $this->_buildHeaderParam(
$param, $value, $h_charset, $h_language, $h_encoding
);
unset($headers[$key]);
}
}
// Default encoding
if (!isset($this->_encoding)) {
$this->_encoding = '7bit';
@@ -280,7 +315,7 @@ class Mail_mimePart
for ($i = 0; $i < count($this->_subparts); $i++) {
$encoded['body'] .= '--' . $boundary . $eol;
$tmp = $this->_subparts[$i]->encode();
if (PEAR::isError($tmp)) {
if ($this->_isError($tmp)) {
return $tmp;
}
foreach ($tmp['headers'] as $key => $value) {
@@ -303,7 +338,7 @@ class Mail_mimePart
@ini_set('magic_quotes_runtime', $magic_quote_setting);
}
if (PEAR::isError($body)) {
if ($this->_isError($body)) {
return $body;
}
$encoded['body'] = $body;
@@ -355,7 +390,7 @@ class Mail_mimePart
@ini_set('magic_quotes_runtime', $magic_quote_setting);
}
return PEAR::isError($res) ? $res : $this->_headers;
return $this->_isError($res) ? $res : $this->_headers;
}
/**
@@ -390,7 +425,7 @@ class Mail_mimePart
for ($i = 0; $i < count($this->_subparts); $i++) {
fwrite($fh, $f_eol . '--' . $boundary . $eol);
$res = $this->_subparts[$i]->_encodePartToFile($fh);
if (PEAR::isError($res)) {
if ($this->_isError($res)) {
return $res;
}
$f_eol = $eol;
@@ -405,7 +440,7 @@ class Mail_mimePart
$res = $this->_getEncodedDataFromFile(
$this->_body_file, $this->_encoding, $fh
);
if (PEAR::isError($res)) {
if ($this->_isError($res)) {
return $res;
}
}
@@ -633,8 +668,8 @@ class Mail_mimePart
// RFC 2045:
// value needs encoding if contains non-ASCII chars or is longer than 78 chars
if (!preg_match('#[^\x20-\x7E]#', $value)) {
$token_regexp = '#([^\x21,\x23-\x27,\x2A,\x2B,\x2D'
. ',\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#';
$token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
. '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
if (!preg_match($token_regexp, $value)) {
// token
if (strlen($name) + strlen($value) + 3 <= $maxLength) {
@@ -656,7 +691,7 @@ class Mail_mimePart
// RFC2231:
$encValue = preg_replace_callback(
'/([^\x21,\x23,\x24,\x26,\x2B,\x2D,\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])/',
'/([^\x21\x23\x24\x26\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])/',
array($this, '_encodeReplaceCallback'), $value
);
$value = "$charset'$language'$encValue";
@@ -780,6 +815,7 @@ class Mail_mimePart
'from', 'to', 'cc', 'bcc', 'sender', 'reply-to',
'resent-from', 'resent-to', 'resent-cc', 'resent-bcc',
'resent-sender', 'resent-reply-to',
'mail-reply-to', 'mail-followup-to',
'return-receipt-to', 'disposition-notification-to',
);
$other_headers = array(
@@ -800,6 +836,9 @@ class Mail_mimePart
// Structured header (make sure addr-spec inside is not encoded)
if (!empty($separator)) {
// Simple e-mail address regexp
$email_regexp = '([^\s<]+|("[^\r\n"]+"))@\S+';
$parts = Mail_mimePart::_explodeQuotedString($separator, $value);
$value = '';
@@ -817,12 +856,12 @@ class Mail_mimePart
}
// let's find phrase (name) and/or addr-spec
if (preg_match('/^<\S+@\S+>$/', $part)) {
if (preg_match('/^<' . $email_regexp . '>$/', $part)) {
$value .= $part;
} else if (preg_match('/^\S+@\S+$/', $part)) {
} else if (preg_match('/^' . $email_regexp . '$/', $part)) {
// address without brackets and without name
$value .= $part;
} else if (preg_match('/<*\S+@\S+>*$/', $part, $matches)) {
} else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) {
// address with name (handle name)
$address = $matches[0];
$word = str_replace($address, '', $part);
@@ -1187,4 +1226,22 @@ class Mail_mimePart
return sprintf('%%%02X', ord($matches[1]));
}
/**
* PEAR::isError wrapper
*
* @param mixed $data Object
*
* @return bool True if object is an instance of PEAR_Error
* @access private
*/
function _isError($data)
{
// PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
if (is_object($data) && is_a($data, 'PEAR_Error')) {
return true;
}
return false;
}
} // End of class
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,4 @@
<?php
class Net_IDNA2_Exception extends Exception
{
}
@@ -0,0 +1,6 @@
<?php
require_once 'Net/IDNA2/Exception.php';
class Net_IDNA2_Exception_Nameprep extends Net_IDNA2_Exception
{
}
@@ -0,0 +1,146 @@
<?php
header( 'Content-Type: text/html; charset=UTF-8' );
require 'Net/IDNA.php';
$idn = Net_IDNA::getInstance();
if (isset($_REQUEST['encode'])) {
$decoded = isset($_REQUEST['decoded'])? $_REQUEST['decoded'] : '';
try {
$encoded = $idn->encode($decoded);
}
catch (Exception $e) {
/* just swallow */
}
}
if (isset($_REQUEST['decode'])) {
$encoded = isset($_REQUEST['encoded'])? $_REQUEST['encoded'] : '';
try {
$decoded = $idn->decode($encoded);
}
catch (Exception $e) {
/* just swallow */
}
}
if (!isset($encoded)) {
$encoded = '';
}
if (!isset($decoded)) {
$decoded = '';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Punycode Converter</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
body
{
font-family: Helvetica, Arial, sans-serif;
font-size: 10pt;
background: rgb( 255, 255, 255 );
}
#centered
{
text-align: center;
vertical-align: middle;
}
#round
{
background-color: rgb( 240, 240, 240 );
border: 1px solid black;
text-align: center;
vertical-align: middle;
padding: 4px;
}
#subhead
{
font-size: 8pt;
}
</style>
</head>
<body>
<table width="780" border="0" cellpadding="0" cellspacing="0">
<tr>
<td id="centered">
<div id="round">
<strong>IDNA Converter</strong><br />
<span id="subhead">
See <a href="http://faqs.org/rfcs/rfc3490.html" title="IDNA" target="_blank">RFC3490</a>,
<a href="http://faqs.org/rfcs/rfc3491.html" title="Nameprep, a Stringprep profile" target="_blank">RFC3491</a>,
<a href="http://faqs.org/rfcs/rfc3492.html" title="Punycode" target="_blank">RFC3492</a> and
<a href="http://faqs.org/rfcs/rfc3454.html" title="Stringprep" target="_blank">RFC3454</a><br />
</span>
<br />
This converter allows you to transfer domain names between the encoded (Punycode) notation and the
decoded (UTF-8) notation.<br />
Just enter the domain name in the respective field and click on the button right beside it to have
it converted. Please be aware, that you might even enter complete domain names (like j&#xFC;rgen-m&#xFC;ller.de),
but without the protocol (<strong>DO NOT</strong> enter http://m&#xFC;ller.de) or an email address.<br />
Since the underlying library is still buggy, we cannot guarantee its usefulness and correctness. You should
always doublecheck the results given here by converting them back to the original form.<br />
Any productive use is discouraged and prone to fail.<br />
<br />
Make sure, that your browser is capable of the <strong>UTF-8</strong> character encoding.<br />
<br />
<table border="0" cellpadding="2" cellspacing="2" align="center">
<tr>
<td class="thead" align="left">Original</td>
<td class="thead" align="right">Punycode</td>
</tr>
<tr>
<td>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
<input type="text" name="decoded" value="<?php echo $decoded; ?>" size="24" maxlength="255" />
<input type="submit" name="encode" value="Encode &gt;&gt;" />
</form>
</td>
<td>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
<input type="submit" name="decode" value="&lt;&lt; Decode" />
<input type="text" name="encoded" value="<?php echo $encoded; ?>" size="24" maxlength="255" />
</form>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</body>
</html>
@@ -0,0 +1,32 @@
<?php
if (!defined('PHPUnit2_MAIN_METHOD')) {
define('PHPUnit2_MAIN_METHOD', 'Net_IDNA2_AllTests::main');
}
require_once 'PHPUnit2/TextUI/TestRunner.php';
require_once 'Net_IDNA2Test.php';
require_once 'draft-josefsson-idn-test-vectors.php';
class Net_IDNA2_AllTests
{
public static function main()
{
PHPUnit2_TextUI_TestRunner::run(self::suite());
}
public static function suite()
{
$suite = new PHPUnit2_Framework_TestSuite('PEAR - Net_IDNA2');
$suite->addTestSuite('Net_IDNA2Test');
$suite->addTestSuite('draft-josefsson-idn-test-vectors');
return $suite;
}
}
if (PHPUnit2_MAIN_METHOD == 'Net_IDNA2_AllTests::main') {
Net_IDNA2_AllTests::main();
}
@@ -0,0 +1,68 @@
<?php
require_once 'Net/IDNA2.php';
require_once 'PHPUnit2/Framework/TestCase.php';
class Net_IDNA2Test extends PHPUnit2_Framework_TestCase
{
/**
* Initialise tests
*
* @return void
*/
public function setUp()
{
$this->idn = new Net_IDNA2();
}
/**
* Test if a complete URL consisting also of port-number etc. will be decoded just fine, test 1
*
* @return void
*/
public function testShouldDecodePortNumbersFragmentsAndUrisCorrectly1()
{
$result = $this->idn->decode('http://www.xn--ml-6kctd8d6a.org:8080/test.php?arg1=1&arg2=2#fragment');
$this->assertSame("http://www.\xD0\xB5\xD1\x85\xD0\xB0m\xD1\x80l\xD0\xB5.org:8080/test.php?arg1=1&arg2=2#fragment", $result);
}
/**
* Test if a complete URL consisting also of port-number etc. will be decoded just fine, test 2
*
* @return void
*/
public function testShouldDecodePortNumbersFragmentsAndUrisCorrectly2()
{
$result = $this->idn->decode('http://xn--tst-qla.example.com:8080/test.php?arg1=1&arg2=2#fragment');
$this->assertSame("http://täst.example.com:8080/test.php?arg1=1&arg2=2#fragment", $result);
}
/**
* Test encoding of German letter Eszett according to the original standard (IDNA2003)
*
* @return void
*/
public function testEncodingForGermanEszettUsingIDNA2003()
{
// make sure to use 2003-encoding
$this->idn->setParams('version', '2003');
$result = $this->idn->encode('http://www.straße.example.com/');
$this->assertSame("http://www.strasse.example.com/", $result);
}
/**
* Test encoding of German letter Eszett according to the "new" standard (IDNA2005/IDNAbis)
*
* @return void
*/
public function testEncodingForGermanEszettUsingIDNA2008()
{
// make sure to use 2008-encoding
$this->idn->setParams('version', '2008');
$result = $this->idn->encode('http://www.straße.example.com/');
// switch back for other testcases
$this->idn->setParams('version', '2003');
$this->assertSame("http://www.xn--strae-oqa.example.com/", $result);
}
}