我有一个来自XML文件的字符串,似乎已用htmlspecialchars()
编码两次:
$data = "string,s example";
我尝试用安瓿取代&
,然后调用htmlspecialchars_decode()
,然后用单词"和"替换简单的放大器,但输出结果出来了比如stringand#44; example
。
我想知道是否有办法正确转换这些字符编码,或者可能是正则表达式完全剥离它们(因为我可以简单地删除它们并将其用作值以便稍后检查)?
答案 0 :(得分:3)
这个特定字符串needs to be processed twice由html_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
)