Just to clarify...
session.use_trans_sid does NOT need to be enabled in order for output_add_rewrite_var() to work.
output_add_rewrite_var
(PHP 4 >= 4.3.0, PHP 5)
output_add_rewrite_var — Add URL rewriter values
Description
$name
, string $value
)This function adds another name/value pair to the URL rewrite mechanism. The name and value will be added to URLs (as GET parameter) and forms (as hidden input fields) the same way as the session ID when transparent URL rewriting is enabled with session.use_trans_sid. Please note that absolute URLs (http://example.com/..) aren't rewritten.
This function's behavior is controlled by the url_rewriter.tags php.ini parameter.
Note: Calling this function will implicitly start output buffering if it is not active already.
Parameters
-
name -
The variable name.
-
value -
The variable value.
Return Values
Returns TRUE on success or FALSE on failure.
Examples
Example #1 output_add_rewrite_var() example
<?php
output_add_rewrite_var('var', 'value');
// some links
echo '<a href="file.php">link</a>
<a href="http://example.com">link2</a>';
// a form
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>';
print_r(ob_list_handlers());
?>
The above example will output:
<a href="file.php?var=value">link</a>
<a href="http://example.com">link2</a>
<form action="script.php" method="post">
<input type="hidden" name="var" value="value" />
<input type="text" name="var2" />
</form>
Array
(
[0] => URL-Rewriter
)
See Also
- output_reset_rewrite_vars() - Reset URL rewriter values
- ob_flush() - Flush (send) the output buffer
- ob_list_handlers() - List all output handlers in use
For a completely valid XHTML document you have to set the arg_separator, use this before you use output-add-rewrite-var:
<?php
ini_set('arg_separator.input', '&');
ini_set('arg_separator.output', '&');
?>
As a small side note, when there are values in the output_add_rewrite_var() function, these values are applied to all dynamic addresses (with in the limits posted above), including addresses that already have that variable set.
Example:
<?
output_add_rewrite_var("page", "admin");
echo '<a href="?a=signup&page=home">Signup</a>';
?>
The above will output the following:
<a href="?a=signup&page=home&page=admin">Signup</a>
However, this is easy to get around, using output buffering inside of output buffering. Because in my case, I couldn't remove the rewrite variable, as I have no idea if the next address would need it or not.
This function also adds a parameter to <input type="image"> fields!
Example:
This code:
<?
output_add_rewrite_var ('var','value');
echo '<form action="" method="post">
<input type="image" src="image.jpg" alt="go">
</form>';
?>
will output something like this:
<form action="" method="post">
<input type="hidden" name="var" value="value">
<input type="image" src="image.jpg?var=value" alt="go">
</form>
