带网址的特殊字符

时间:2014-02-03 14:53:06

标签: php url-rewriting character-encoding

我使用htmlentities删除请求网址中的特殊字符,但不起作用 代码对应于调用我的网址是:

 <select name="article">
 <option value='Tout' >Tout</option>  
 echo '<option value="'.htmlentities($rowact['article']).'" ';
if(...))
{
{echo 'selected';} 
}
echo'>'.htmlentities($rowact['article']).' </option>';      

url:http://mondomain.com/+Bar%252C+caf%25C3%25A9%2

请提出任何建议,提前致谢

3 个答案:

答案 0 :(得分:1)

htmlentities不适用于编码网址 使用urlencode对网址中的特殊字符进行编码

答案 1 :(得分:0)

使用htmlentities你可以转换html实体,但要编码你需要使用urlencode函数的url参数。

<select name="article"> <option value='Tout' >Tout</option>
echo '<option value="'.urlencode($rowact['article']).'" '; if(...)) { {echo 'selected';} } echo'>'.htmlentities($rowact['article']).' </option>';

urlencode description

答案 2 :(得分:0)

htmlentities将所有适用的字符转换为HTML实体(请参阅http://www.php.net/htmlentities)。 如果您只想允许某些字符,请使用正则表达式,例如:

preg_replace("/([^a-zA-Z0-9\ ]*)/","",$rowact['activite'])

此示例仅允许字母(大写和小写),数字和空格。 有关更多信息,请点击此处:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

编辑:

即使它不是最好的解决方案,您也可以使用preg_replace替换特定的特殊字符,如下面的代码所示:

$find = array();
$find[] = '/[\"]/';
$find[] = '/[\&]/';
$find[] = '/[\<]/';
$find[] = '/[\>]/';

$replace = array();
$replace[] = "&quot;";
$replace[] = "&amp;";
$replace[] = "&lt;";
$replace[] = "&gt;";

preg_replace($find,$replace,$rowact['activite']);