PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » HTML » Pager » Bug #4897

incorrect links when include Multibyte String

Details

Submitted2005-07-23 08:16 UTC
Fromkenchou77 at gmail dot com
Assignedquipo
StatusClosed
PackagePager
PHP VersionIrrelevant
Roadmaps(Not assigned)

Comments

[2005-07-23 08:16 UTC] kenchou77 at gmail dot com

Description:
------------
Pager build incorrect query string on chinese chars.
Maybe all htmlentities should replace with htmlspecialchars.

[2005-08-01 17:44 UTC] astor at 21cn dot com

I think this bug is caused by the usage of htmlentities instead of urlencode, since 2.3.0 works well.

[2005-08-05 08:23 UTC] kenchou77 at gmail dot com

The test Script based on docs/Pager/example/example.php:
<?php
require_once 'Pager/Pager.php';

//create dummy array of data
$myData = array();
for ($i=0; $i<200; $i++) {
$myData[] = $i;
}

//set a string
$test_string = '测试';

$params = array(
'itemData' => $myData,
'perPage' => 10,
'delta' => 8,
'append' => true,

'clearIfVoid' => false,
'urlVar' => 'entrant',
'useSessions' => true,
'closeSession' => true,

'mode' => 'Jumping',
'extraVars' => array('test' => $test_string)
);

$pager = & Pager::factory($params);
$page_data = $pager->getPageData();
$links = $pager->getLinks();

$selectBox = $pager->getPerPageSelectBox();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Pager Test</title>
</head>

<body>
<?php
//compare string
if (isset($_REQUEST['test'])) {
$request_test = $_REQUEST['test'];
var_dump($request_test, $test_string, ($request_test == $test_string));
}
?>
<table border="1" width="500" summary="example 1">
<tr>
<td colspan="3" align="center">
<?php echo $links['all']; ?>
</td>
</tr>

<tr>
<td colspan="3">
<pre><?php print_r($page_data); ?></pre>
</td>
</tr>
</table>

<h4>Results from methods:</h4>

<pre>
getCurrentPageID()...: <?php var_dump($pager->getCurrentPageID()); ?>
getNextPageID()......: <?php var_dump($pager->getNextPageID()); ?>
getPreviousPageID()..: <?php var_dump($pager->getPreviousPageID()); ?>
numItems()...........: <?php var_dump($pager->numItems()); ?>
numPages()...........: <?php var_dump($pager->numPages()); ?>
isFirstPage()........: <?php var_dump($pager->isFirstPage()); ?>
isLastPage().........: <?php var_dump($pager->isLastPage()); ?>
isLastPageComplete().: <?php var_dump($pager->isLastPageComplete()); ?>
$pager->range........: <?php var_dump($pager->range); ?>
</pre>

<hr />

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Select how many items per page should be shown:<br />
<?php echo $selectBox; ?>  
<input type="submit" value="submit" />
</form>

<hr />

</body>
</html>

-------------

Expected result:
string(8) "测试"
string(4) "测试"
bool(true)

-----------

Actual result:
string(8) "虏芒脢脭"
string(4) "测试"
bool(false)

[2005-09-27 04:29 UTC] daniel at konczyk dot net

You need to encode the var before you use htmlentities, otherwise, htmlentities encodes the multibyte char wrong.

I've made a change in _http_build_query_wrapper function:
1175 array_push($tmp, key.'='.urlencode($val));

And that fixes the problem. Well, as far as I tested..
I'm using 2.3.0

[2005-09-28 08:05 UTC] kenchou77 at gmail dot com

OK, the latest CVS version works correctly :)

[2005-09-28 18:17 UTC] daniel at konczyk dot net

It works for me too (latest cvs)
Can you please make a new release then?