Background:
WordPress strips out %0A from URL because in general newline has no practical purpose in URL. Unless it’s a mailto: protocol, WordPress strips out %0A.
So it’s better not to use them in URL at all.
Solution:
Still, if for any specific purpose you have to use %0A, you may use %250A and then filter it back to %0A using clean_url filter.
%250Ais URL encoded version of%0A, i.e. double URL encoded version ofnewline.
You may use the following CODE for filtering (in a plugin or in your active theme’s functions.php file):
add_filter( 'clean_url', 'double_encoded_nl_to_encoded_nl' );
function double_encoded_nl_to_encoded_nl( $url ) {
return str_ireplace( '%250A', '%0A', $url );
}
Now, this: esc_url( "http://example.com/?q=foo%250Abar" ); will return http://example.com/?q=foo%0Abar.