删除特殊字符编码

时间:2012-11-03 18:05:13

标签: php regex utf-8 htmlspecialchars

我有一个来自XML文件的字符串,似乎已用htmlspecialchars()编码两次:

$data = "string,s example";

我尝试用安瓿取代&,然后调用htmlspecialchars_decode(),然后用单词"和"替换简单的放大器,但输出结果出来了比如stringand#44; example。 我想知道是否有办法正确转换这些字符编码,或者可能是正则表达式完全剥离它们(因为我可以简单地删除它们并将其用作值以便稍后检查)?

3 个答案:

答案 0 :(得分:3)

这个特定字符串needs to be processed twicehtml_entity_decode获取其“真实”值(这些调用中的第一个也可以是htmlspecialchars_decode)。第一个过程会将&转换为&,第二个过程会将实体,转换为相应的字符。

你应该小心地将所有相关参数传递给解码函数调用(默认情况下在所有情况下都没有意义),当然要确保所有传入数据都以这种方式编码,这样你就不会不会错误地输出错误。

答案 1 :(得分:0)

使用html_entity_decode,如下所示:

$data = html_entity_decode ( html_entity_decode ( $data ) );

答案 2 :(得分:0)

虽然它几乎可以肯定地在原生PHP中工作,但是当应用于从Laravel控制器馈送到其视图的字符串时,接受的解决方案似乎什么都不做。例如,要转储变量,我发现唯一有效的方法是提供e返回的值。 g。,print_r ( $_ENV , true )通过with方法,并将封闭的pre标记放入视图中。

<强>控制器:

$sDebugMessages = '$_ENV = '.  print_r ( $_ENV , true ) ;
return view ( 'Info' )->with ( 'sPageTitle' , 'What is My Praesidium Central Hub?' )->with ( 'sDebugMessages' , $sDebugMessages ) ;

查看:

pre>{{ $sDebugMessages }}</pre>

结果(编辑,原因应该是不可靠的:

$_ENV = Array
(
    [APP_ENV] => local
    [APP_KEY] => xxxxxxxxxxxxxxx
    [APP_DEBUG] => true
    [APP_LOG_LEVEL] => debug
    [APP_URL] => https://localhost
    [DB_CONNECTION] => mysql
    [DB_HOST] => localhost:3306
    [DB_DATABASE] => xxxxxxxxxxxxxxx
    [DB_USERNAME] => xxxxxxxxxxxxxxx
    [DB_PASSWORD] => xxxxxxxxxxxxxxx
    [BROADCAST_DRIVER] => log
    [CACHE_DRIVER] => file
    [SESSION_DRIVER] => database
    [QUEUE_DRIVER] => sync
    [MAIL_DRIVER] => smtp
    [MAIL_HOST] => xxxxxxxxxxxxxxx
    [MAIL_PORT] => 587
    [MAIL_ENCRYPTION] => tls
    [MAIL_USERNAME] => xxxxxxxxxxxxxxx
    [MAIL_PASSWORD] => xxxxxxxxxxxxxxx
    [MAIL_FROM_ADDRESS] => xxxxxxxxxxxxxxx
    [MAIL_FROM_NAME] => xxxxxxxxxxxxxxx
    [MAIL_MODE] => xxxxxxxxxxxxxxx
    [MAIL_MODE_EMAIL] => xxxxxxxxxxxxxxx
)